Aiuto sottoprogramma.

di il
3 risposte

Aiuto sottoprogramma.

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

  • Re: Aiuto sottoprogramma.

    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;
    }
    
    
  • Re: Aiuto sottoprogramma.

    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 .
  • Re: Aiuto sottoprogramma.

    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