Programma in c

Sk_Anonymous
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

#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
Nidhogg
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.

Sk_Anonymous
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; 
}

Sk_Anonymous
problemi risolti

#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

Rispondi
Per rispondere a questa discussione devi prima effettuare il login.