Aiuto sottoprogramma.

di Anonimizzato13839 il
3 risposte
Ciao a tutti,
volevo chiedervi una mano per un sottoprogramma in C premettendo che sono alle prime armi.
La richiesta dell'esercizio è creare un programma che presi un vettore e il suo riempimento inserisca dopo ogni numero pari un intero da noi inserito. Il mio problema è proprio con la funzione che modifica il vettore che non funziona bene. Posto il codice che ho scritto:
#include <stdio.h>
#include <stdlib.h>
#define SIZE 100

void leggi_vettore(int[], int* );
void modifica_vettore(int[], int*, int);
void stampa_vettore(int[], int);


int main(int argc, char *argv[])
{
  int vet[SIZE], n, x;
    
  leggi_vettore(vet, &n);  
printf("\n Inserisci un valore intero: \n");
scanf("%d", &x);
  printf("\n Il vettore inserito e' : \n");   
  stampa_vettore(vet, n); 
  
  modifica_vettore(vet, &n, x);
  
   printf("\n Il vettore modificato e' : \n");
 stampa_vettore(vet, n);
 
 
 printf("\n La nuova dimensione e': %d . \n", n);   

  
  
  
  system("PAUSE");	
  return 0;
}


void leggi_vettore(int v[], int *d){    
int i;
printf("\n Inserisci la dimensione del vettore: \n");
scanf("%d", &*d);
printf("\n Inserisci i valori (interi)  del vettore \n");
for(i=0; i<*d; i++)
scanf("%d", &v[i]);
}

void stampa_vettore(int v[], int d){
int i;
for(i=0; i<d; i++)
printf(" %d ", v[i]);         
}     

void modifica_vettore(int v[], int *d, int c){
     
int i,j;     
for (i=0;i<(*d)-1;i++) {
if(v[i]%2==0)    {
(*d)++;
for(j=(*d)-1; j>i; j--){                 
v[j]=v[j-1];
v[i+1]=c; 
 
}
}      
}     
}     
     


Premetto che ho provato anche in altri modi ( ciclo while etc) maproprio non ci sono riuscito.. help!

3 Risposte

  • Il primo errore GIGANTE che tu possa aver fatto è quello di usare dev-c++.
    Quell'ide ormai è obsoleto,perdipiu non è main andato bene.

    Per il codice ci sono diversi errori,soprattutto logici.
    
    #include <stdio.h>
    #include <stdlib.h>
    #define SIZE 100
    
    void leggi_vettore(int[], int* );
    int  modifica_vettore(int v[],int *d);
    int  insert_vettore(int v[],int pos, int *d, int val);
    void stampa_vettore(int[], int);
    
    
    int main(int argc, char *argv[])
    {
      int vet[SIZE], n;
    
      leggi_vettore(vet, &n);
    
      stampa_vettore(vet, n);
    
      if (!modifica_vettore(vet, &n)) return -1;
    
      stampa_vettore(vet, n);
    
      printf("\n La nuova dimensione e': %d . \n", n);
    
      return 0;
    }
    
    
    void leggi_vettore(int v[], int *d)
    {
        int i;
        do
        {
            printf("\n Inserisci la dimensione del vettore:");
            //scanf("%d", &*d); la mente umana trova infinite vie
            scanf("%d", d);
        }while (*d > SIZE );
    
        printf("\n Inserisci i valori (interi)  del vettore \n");
        for(i=0; i < *d; i++)
            scanf("%d", &v[i]);
    }
    
    void stampa_vettore(int v[], int d)
    {
        int i;
        for(i=0; i<d; i++)
            printf("vettore[%d] = %d \n", i,v[i]);
    }
    
    int modifica_vettore(int v[],int *d)
    {
        printf("Modifica vettore:\n");
    
        int i,n;
        for (i = 0 ; i < *d ; i++)
        {
            if ( v[i] % 2 == 0)
            {
                printf("Insert value:");
                scanf("%d",&n);
                if ( !insert_vettore( v , i+1 , d , n) ) return 0;
            }
        }
        return 1;
    }
    
    int insert_vettore(int v[],int pos, int *d, int val)
    {
        if ( !(*d < SIZE) ) return 0;
    
        int i;
        for ( i = *d; i > pos ; i--)
            v[i] = v[i-1];
    
        v[pos] = val;
        ++*d;
        return 1;
    }
    
    
  • Grazie vbextreme per la tua proposta. Per quanto riguarda il dev, la prof ci ha detto di lavorare in questo ambiente quindi non posso farci nulla .. Ho provato a compilare il tuo codice ma funziona solo fin quando viene richiesto di scrivere il valore da inserire nel vettore ma dopo va in crash.
    Grazie comunque proverò a studiarmi i tuoi algoritmi per vedere se li riesco a riutilizzarli .
  • Non potrai mai programmare decentemente usando dev-c++ è talmente pieno di bug che codice perfetto genera errori.

    Quindi di alla tua prof che non userai mai e poi mai un programma che non ti permetta di imparare un linguaggio!
    Digli anche che hai scelto una valida alternativa CODE::BLOCKS ide opensource come il dev,utilizza lo stesso compilatore quale mingw.Solo che tale ide è aggiornato,l'ultima versione è uscita praticamente quest'anno.Il compilatore pure.

    Una volta che avrai scaricato e installato code::blocks o qualsiasi altra alternativa prova a copiare il codice,compilalo e fammi sapere.
    Saluti e baci.
Devi accedere o registrarti per scrivere nel forum
3 risposte