Accedi

Somma di due vettori

PROBLEMA

Caricare in modo randomico due Vettori A e B con N elementi (uguale lunghezza) sommare gli elementi di A e B in un vettore 3.


CODICE SORGENTE

#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#include <math.h>

int input();
void casuale();
void banner_menu();
void visualizzaVettore_A();
void visualizzaVettore_B();
void visualizzaVettore_C_divisione();
void visualizzaVettore_C_sottrazione();
void visualizzaVettore_C_addizione();
void visualizzaVettore_C_moltiplicazione();
void somma_vettori();
void differenza_vettori();
void moltiplicazione_vettori();
void divisione_vettori();
void banner_grazie();
void banner_time();
//funzione principale
int main(int argc, char *argv[]) {
 //enum per il menu 
 enum scelta {
  visualizza_vettore_a_menu=1,
  visualizza_vettore_b_menu,
  visualizza_somma_menu,
  visualizza_differenza_menu,
  visualizza_moltiplicazione_menu,
  visualizza_divisione_menu,
  uscita_menu,
 };
 //sezione dichiarativa
 int a, scelta; //a=numero di elementi per array; scelta=scelta per il menu
 a=input();
 //dichiarazione array
 int array_a[a];
 int array_b[a];
 float array_c[a];
 //randomizzazione dei numeri
 casuale(array_a, array_b, a);
 //ciclo do while per il reinserimento delle opzione del menu
 do {
  banner_menu();
  scanf("%i", &scelta);
  switch (scelta) {
   case visualizza_vettore_a_menu:
    visualizzaVettore_A(array_a, a);
    getch();
    break;
   case visualizza_vettore_b_menu:
    visualizzaVettore_B(array_b, a);
    getch();
    break;
   case visualizza_somma_menu:
    somma_vettori(array_a, array_b, array_c, a);
    visualizzaVettore_C_addizione(array_a, array_b, array_c, a);
    getch();
    break;
   case visualizza_differenza_menu:
    differenza_vettori(array_a, array_b, array_c, a);
    visualizzaVettore_C_sottrazione(array_a, array_b, array_c, a);
    getch();
    break;
   case visualizza_moltiplicazione_menu:
    moltiplicazione_vettori(array_a, array_b, array_c, a);
    visualizzaVettore_C_moltiplicazione(array_a, array_b, array_c, a);
    getch();
    break;
   case visualizza_divisione_menu:
    divisione_vettori(array_a, array_b, array_c, a);
    visualizzaVettore_C_divisione(array_a, array_b, array_c, a);
    getch();
    break;
   case uscita_menu:
    banner_grazie();
    break;
   default:
    break;
  }
 }while((scelta>=0) && (scelta<7));
 system("PAUSE");
 return 0;
}
int input () {
 //sezione dichiarativa
 int i, x; //i=contatore; x=numero di elementi
 //do while per ripetere lo scanf se non è conforme alla condizione
 do {
  system("cls");
  printf("Inserire numero di elementi per vettore:");
  scanf("%i", &x);
  if (x<=0) {
   //attesa di 5 secondi per poter reinserire l'input
   for (i=5;i>0;i--){
    system("cls");
    printf("[!] Il valore immesso non e' valido potrai reinserire il valore tra %i secondi", i);
    sleep(1);
   }
  }
 } while(x<=0); //deve essere maggiore di 0 per uscire dal ciclo
 return (x); //richiamare il risultato con input();
}
//funzione caricamento array con valori casuali
void casuale (int array_a[], int array_b[], int a) {
 //sezione dichiarativa
 int i, x; //i=contatore; x=variabile di appoggio per generare il numero positivo o negativo
 srand(time(NULL));
 //ciclo for per assegnare un numero casuale a ogni elemento dei due array
 for (i=0;i<a;i++) {
  array_a[i]=rand()%51+1;
  //decidere casulmente il numero positivo o negativo
  x=rand()%2;
  if (x==1) {
   array_a[i]=array_a[i]-(array_a[i]*2);
  }
  array_b[i]=rand()%101+1;
  //decidere casulmente il numero positivo o negativo
  x=rand()%2;
  if (x==1) {
   array_b[i]=array_b[i]-(array_b[i]*2);
  }
 }
}
void visualizzaVettore_A (int array_a[], int a){
 //sezione dichiarativa
 int i;
 system("cls");
 banner_time();
 //richiaamo funzione
 printf("\tElemento\tContenuto");
 //for per mostrare a video posizione e contenuto
 for (i=0;i<a;i++) {
  printf("\n\t   %i\t\t   %i", i+1, array_a[i]);
 }
 printf("\n------------------------------------------------------------------------------\n");
 printf("Premi un tasto per tornare al menu...");
}
void visualizzaVettore_B (int array_b[], int a){
 //sezione dichiarativa
 int i;
 system("cls");
 banner_time();
 //richiaamo funzione
 printf("\tElemento\tContenuto");
 //for per mostrare a video posizione e contenuto
 for (i=0;i<a;i++) {
  printf("\n\t   %i\t\t   %i", i+1, array_b[i]);
 }
 printf("\n------------------------------------------------------------------------------\n");
 printf("Premi un tasto per tornare al menu...");
}
void visualizzaVettore_C_sottrazione (int array_a[], int array_b[], float array_c[], int a){
 //sezione dichiarativa
 int i;
 system("cls");
 banner_time();
 printf("\t\t\t\tSottrazione");
 printf("\n------------------------------------------------------------------------------\n");
 //richiaamo funzione
 printf("\tElemento\tVettore A\tVettore B\tVettore C");
 //for per mostrare a video posizione e contenuto
 for (i=0;i<a;i++) {
  printf("\n\t   %i\t\t   %i\t\t   %i\t\t   %.0f", i+1, array_a[i], array_b[i], array_c[i]);
 }
 printf("\n------------------------------------------------------------------------------\n");
 printf("Premi un tasto per tornare al menu...");
}
void visualizzaVettore_C_addizione (int array_a[], int array_b[], float array_c[], int a){
 //sezione dichiarativa
 int i;
 system("cls");
 banner_time();
 printf("\t\t\t\tAddizione");
 printf("\n------------------------------------------------------------------------------\n");
 //richiaamo funzione
 printf("\tElemento\tVettore A\tVettore B\tVettore C");
 //for per mostrare a video posizione e contenuto
 for (i=0;i<a;i++) {
  printf("\n\t   %i\t\t   %i\t\t   %i\t\t   %.0f", i+1, array_a[i], array_b[i], array_c[i]);
 }
 printf("\n------------------------------------------------------------------------------\n");
 printf("Premi un tasto per tornare al menu...");
}
void visualizzaVettore_C_moltiplicazione (int array_a[], int array_b[], float array_c[], int a){
 //sezione dichiarativa
 int i;
 system("cls");
 banner_time();
 printf("\t\t\t\tMoltiplicazione");
 printf("\n------------------------------------------------------------------------------\n");
 //richiaamo funzione
 printf("\tElemento\tVettore A\tVettore B\tVettore C");
 //for per mostrare a video posizione e contenuto
 for (i=0;i<a;i++) {
  printf("\n\t   %i\t\t   %i\t\t   %i\t\t   %.0f", i+1, array_a[i], array_b[i], array_c[i]);
 }
 printf("\n------------------------------------------------------------------------------\n");
 printf("Premi un tasto per tornare al menu...");
}
void visualizzaVettore_C_divisione (int array_a[], int array_b[], float array_c[], int a){
 //sezione dichiarativa
 int i;
 system("cls");
 banner_time();
 printf("\t\t\t\tDivisione");
 printf("\n------------------------------------------------------------------------------\n");
 //richiaamo funzione
 printf("\tElemento\tVettore A\tVettore B\tVettore C");
 //for per mostrare a video posizione e contenuto
 for (i=0;i<a;i++) {
  printf("\n\t   %i\t\t   %i\t\t   %i\t\t   %.0f", i+1, array_a[i], array_b[i], array_c[i]);
 }
 printf("\n------------------------------------------------------------------------------\n");
 printf("Premi un tasto per tornare al menu...");
}
void somma_vettori (int array_a[], int array_b[], float array_c[], int a) {
 //sezione dichiarativa
 int i;
 //ciclo for per ripetere l'operazione per tutti gli elementi
 for (i=0;i<a;i++) {
  if (array_a[i]>=0 && array_b[i]>=0) { //segno concordo "+"
   array_c[i]=(float)array_a[i]+array_b[i];
  }
  else if (array_a[i]<0 && array_b[i]<0){ //segno concordo "-"
   array_c[i]=(float)(abs(array_a[i])+(abs(array_b[i])));
   array_c[i]=array_c[i]-(array_c[i]*2);
  }
  else { //segno discordo
   if ((abs(array_a[i]))>(abs(array_b[i]))) { //se valore A è maggiore B
    array_c[i]=(float)(abs(array_a[i])-(abs(array_b[i])));
    if (array_a[i]>=0) { //se è il valore A ha il segno "+"
     if (array_c[i]<0) { //se C è minore di 0 renderlo positivo
      array_c[i]=array_c[i]+(array_c[i]*2);
     }
    }
    else { //se è il valore A ha il segno "-"
     if (array_c[i]>=0) { //se C è maggiore di 0 renderlo positivo
      array_c[i]=array_c[i]-(array_c[i]*2);
     }
    }
   }
   else { //se valore B è maggiore A
    array_c[i]=(float)(abs(array_b[i])-(abs(array_a[i]))); //sottrazione tra valori assoluti
    if (array_b[i]>=0) { //se B ha il segno "+"
     if (array_c[i]<0) { //se C è nagativo renderlo positivo
      array_c[i]=array_c[i]+(array_c[i]*2);
     }
    }
    else { //se B ha il segno "-"
     if (array_c[i]>=0) { //se C è positivo renderlo negativo
      array_c[i]=array_c[i]-(array_c[i]*2);
     }
    }
   }
  }
 }
}
//funzione per la sottrazione
void differenza_vettori (int array_a[], int array_b[], float array_c[], int a) {
 //sezione dichiarativa
 int i;
 //sottrarre A e B per ricavarci C
 for (i=0;i<a;i++) {
  array_c[i]=(float)(array_a[i])-(array_b[i]);
 }
}
//funzione per la moltiplicazione
void moltiplicazione_vettori (int array_a[], int array_b[], float array_c[], int a) {
 //sezione dichiarativa
 int i;
 //moltiplicare A e B per ricavarci C
 for (i=0;i<a;i++) {
  array_c[i]=(float)array_a[i]*array_b[i];
 }
}
//funzione per dividere i vettori
void divisione_vettori (int array_a[], int array_b[], float array_c[], int a) {
 //sezione dichiarativa
 int i;
 //dividere A e V per ricavarci C
 for (i=0;i<a;i++) {
  array_c[i]=(float)array_a[i]/array_b[i];
 }
}
void banner_grazie (void) {
 int i;
 system("cls");
 for (i=0;i<5;i++) {
  printf("Grazie di aver utilizzato il programma\n");
  sleep(1);
 }
}
void banner_time (void) {
 //sezione dichiarativa
 time(&t);
 printf("------------------------------------------------------------------------------\n");
 printf("%s", ctime(&t));
 printf("------------------------------------------------------------------------------\n");
}
//funzione per visualizzare il menu
void banner_menu (void) {
 system("cls");
 banner_time();
 printf("1. Contenuto del Vettore A\n");
 printf("2. Contenuto del Vettore B\n");
 printf("3. Somma dei due vettori in C\n");
 printf("4. Differenza dei due vettori in C\n");
 printf("5. Moltiplicazione dei due vettori in C\n");
 printf("6. Divisione positivi nel Vettore C\n");
 printf("7. Esci\n");
 printf("------------------------------------------------------------------------------\n");
 printf("Inserire voce del menu: ");
}