Programma in c
progettare una funzione che ricevuti:
1 un carattere ch
2 un array A di reali
3 un array B di reali
4 un intero d indicante la dimensione di A, B e di C
5 un array C di reali
interpreti ch come operazione da eseguire tra A[k] e B[k] per produrre il valore da assegnare a C[k]. Le operazioni valide sono +, *, -, / in caso di operatore valodo la funzione restituirà un carattere indicante l'operazione effettuata in caso di operatore non valido la funzione restituirà '?' e non effettuerà alcuna operazione. inserire nel programma quanto necessario per verificare se il comportamento della funzione è corretto. Perchè non parte?
grazie
ciao
ps ho un problema analogo con una funzione e una matrice il programma crasha subito ecco quelle poche righe di codice scritte dov'è l'errore?
1 un carattere ch
2 un array A di reali
3 un array B di reali
4 un intero d indicante la dimensione di A, B e di C
5 un array C di reali
interpreti ch come operazione da eseguire tra A[k] e B[k] per produrre il valore da assegnare a C[k]. Le operazioni valide sono +, *, -, / in caso di operatore valodo la funzione restituirà un carattere indicante l'operazione effettuata in caso di operatore non valido la funzione restituirà '?' e non effettuerà alcuna operazione. inserire nel programma quanto necessario per verificare se il comportamento della funzione è corretto. Perchè non parte?
grazie
ciao
#include <stdio.h> #include <stdlib.h> char operazione(char ch, float vA[], float vB[], float vC[], int d); int main() { char ch; int i,j,k,d; float vA[i],vB[j],vC[k]; printf ("Inserire le dimensioni degli array A, B e C: "); scanf ("%d",&d); for (i=0; i<d; i=i+1) { printf ("Inserire l'elemento %d del vettore A; ",i); scanf ("%f",&vA[i]); } for (j=0; j<d; j=j+1) { printf ("Inserire l'elemento %d del vettore B; ",i); scanf ("%f",&vB[i]); } printf ("Inserisci il carattere ('+','-','*','/'): "); scanf ("%c",&ch); printf ("Array C: "); for (i=0; i<d; i=i+1) { printf ("%f ",vC[i]); } printf ("Array B: "); for (j=0; j<d; j=j+1) { printf ("%f ",vB[k]); } printf ("Operazione eseguita sugli array A e B: %c", operazione(ch,vA,vB,vC,d)); printf ("Array C: "); for (k=0; k<d; k=k+1) { printf ("%f ",vC[k]); } system ("PAUSE"); return 0; } char operazione (char ch, float vA[], float vB[], float vC[], int d) { int i,j,k; i=0; j=0; switch (ch) { case '+': for (k=0; k<d; k=k+1) { vC[k]=vA[i]+vB[j]; i=i+1; j=j+1; };break; return '+'; case '-': for (k=0; k<d; k=k+1) { vC[k]=vA[i]-vB[j]; i=i+1; j=j+1; };break; return '-'; case '*': for (k=0; k<d; k=k+1) { vC[k]=vA[i]*vB[j]; i=i+1; j=j+1; };break; return'*'; case '/': for (k=0; k<d; k=k+1) { vC[k]=vA[i]/vB[j]; i=i+1; j=j+1; };break; return '/'; default: for (k=0; k<d; k=k+1) { vC[k]=-1; };break; return '?'; } }
ps ho un problema analogo con una funzione e una matrice il programma crasha subito ecco quelle poche righe di codice scritte dov'è l'errore?
#include <stdio.h> #include <stdlib.h> int main() { int m,n; int i,j,vA[i][j]; printf ("inserisci m (righe array A): "); scanf ("%d",&m); printf ("inserisci n (colonne array A): "); scanf ("%d",&n); /* for (i=0; i<m; i=i+1) { for (j=0; j<n; j=j+1) { printf ("Inserisci l'elemento vA[%d][%d]: ",i,j); scanf ("%d",&vA[i][j]); } }*/ system ("PAUSE"); return 0; }
Risposte
L'errore è nella dichiarazione dei vettori...utilizzi i,j,k variabili non inizializzate e quindi in programma va in violazione di segmentazione. Dopo aver corretto il programma non funzionerà a dovere...però lo vedremo prossimamente! 
Saluti, Ermanno.

Saluti, Ermanno.
non capisco perchè allora in quest'altro programma va tutto liscio:
#include <stdio.h> #include <stdlib.h> int occ(int d, int I, int vA[], int vB[]); int main() { int d,i,j=0,vA[i],vB[j],I; printf ("Inserire le dimensioni degli array A e B: "); scanf ("%d",&d); printf ("Inserire il valore dell'elemento da ricercare nell'array: "); scanf ("%d",&I); for (i=0; i<d; i=i+1) { printf ("Inserire il valore dell'elemento %d dell'array A: ",i); scanf ("%d",&vA[i]); } printf ("Array A: "); for (i=0; i<d; i=i+1) printf ("%d ",vA[i]); printf("\nI = %d",I); printf ("\nNumero di occorrenze di I nel vettore A: %d\n", occ(d, I, vA, vB) ); printf ("Array B: "); for (j=0; j<d; j=j+1) printf ("%d ",vB[j]); printf ("\n"); system ("PAUSE"); return 0; } int occ(int d, int I, int vA[], int vB[]) { int i,j,a,b; a=0; j=0; b=0; for (i=0; i<d; i=i+1) { if (vA[i]==I) { vB[j]=i; a=1; j=j+1; b=j; } } for (j=b; j<d; j=j+1) vB[j]=-1; if (a==1) return b; else return 0; }
problemi risolti
ciao e grazie
#include <stdio.h> #include <stdlib.h> #define DIM 25 int occ(int d, int I, int vA[], int vB[]); int main() { int d,i,j,vA[DIM],vB[DIM],I; printf ("Inserire la dimensione < %u degli array A e B: ",DIM); scanf ("%d",&d); for (i=0; i<d; i=i+1) { printf ("Inserire il valore dell'elemento %d dell'array A: ",i); scanf ("%d",&vA[i]); } printf ("Inserire il valore dell'elemento da ricercare nell'array: "); scanf ("%d",&I); printf ("Array A: "); for (i=0; i<d; i=i+1) printf ("%d ",vA[i]); printf("\nI = %d",I); printf ("\nNumero di occorrenze di I nel vettore A: %d\n", occ(d, I, vA, vB) ); printf ("Array B: "); for (j=0; j<d; j=j+1) printf ("%d ",vB[j]); printf ("\n"); system ("PAUSE"); return 0; } int occ(int d, int I, int vA[], int vB[]) { int i,j,a,b; a=0; j=0; b=0; for (i=0; i<d; i=i+1) { if (vA[i]==I) { vB[j]=i; a=1; j=j+1; b=j; } } for (j=b; j<d; j=j+1) vB[j]=-1; if (a==1) return b; else return 0; }
#include <stdio.h> #include <stdlib.h> #define DIM 25 char operazione(char c, float vA[], float vB[], float vC[], int d); int main() { char c; int d,i,j,k,I; float vA[DIM],vB[DIM],vC[DIM]; printf("Inserire operatore ('+' , '-' , '*' o '/'): "); scanf("%c", &c); printf ("Inserire la dimensione < %u degli array A, B e C: ",DIM); scanf ("%d",&d); for (i=0; i<d; i=i+1) { printf ("Inserire il valore dell'elemento %d dell'array A: ",i); scanf ("%f",&vA[i]); } for (j=0; j<d; j=j+1) { printf ("Inserire il valore dell'elemento %d dell'array B; ",j); scanf ("%f",&vB[j]); } printf ("\nArray A: "); for (i=0; i<d; i=i+1) { printf ("%f ",vA[i]); } printf ("\nArray B: "); for (j=0; j<d; j=j+1) { printf ("%f ",vB[j]); } printf ("\nOperazione eseguita sugli array A e B: %c", operazione(c,vA,vB,vC,d)); printf ("\nArray C: "); for (k=0; k<d; k=k+1) { printf ("%f ",vC[k]); } printf ("\n"); system ("PAUSE"); return 0; } char operazione (char c, float vA[], float vB[], float vC[], int d) { int i,j,k; i=0; j=0; switch (c) { case '+': for (k=0; k<d; k=k+1) { vC[k]=vA[i]+vB[j]; i=i+1; j=j+1; }; return '+'; case '-': for (k=0; k<d; k=k+1) { vC[k]=vA[i]-vB[j]; i=i+1; j=j+1; }; return '-'; case '*': for (k=0; k<d; k=k+1) { vC[k]=vA[i]*vB[j]; i=i+1; j=j+1; }; return'*'; case '/': for (k=0; k<d; k=k+1) { vC[k]=vA[i]/vB[j]; i=i+1; j=j+1; }; return '/'; default: for (k=0; k<d; k=k+1) { vC[k]=-1; }; return '?'; } }
ciao e grazie