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