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: ");
}