Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 12
  1. #1

    [C] Aiuto esercizio passaggio vettori a funzioni

    Salve a tutti, è la prima volta che scrivo in questo forum, e sono lieto di incominciare a rompervi un pò.

    Il testo dell' esercizio che devo svolgere è questo:
    Scrivere una funzione che presi in input due vettori di interi A e B e le loro dimensioni, elimina dal vettore A
    compattandolo tutti i valori che non sono presenti anche in B e ritorna il numero di valori rimasti in A. Il
    prototipo della funzione è long Com(int A[], long dimA, int B[], long dimB). Ad esempio
    se A = [2, 7, 2, 4, 9, 9, 5] (dimA = 7) e B = [5, 5, 4, 6, 2] (dimB = 5) allora la
    funzione modifica il vettore A in modo tale che nelle prime 4 posizioni di A vi sia [2, 2, 4, 5] e ritorna 4.


    Ho provato a svolgerlo e non riesco a capire dove sia il mio errore, potreste aiutarmi?


    codice:
    #include<stdio.h>
    long Com(int A[],long dimA,int B[],long dimB);
    
    
    int main(){
    long n,m;
    printf("Inserisci due valori n e m\n");
    scanf("%ld%ld",&n,&m);
    
    
    printf("Inserisci i valori del primo vettore\n");
    int a[n],b[m];
    long x,j,z;
    for(x=0;x<n;x++){
    scanf("%d",&a[x]);}
    
    printf("Inserisci i valori del secondo vettore\n");
    for(j=0;j<m;j++){
    scanf("%d",&b[j]);}
    
    long s=Com(a,n,b,m);
    
    printf("La lunghezza del nuovo vettore modificato è %ld\n",s);
    printf("Il vettore modificato è uguale a...\n");
    
    for(z=0;z<s;z++){
    printf("%d\n",a[z]);}}
    
    
    long Com(int A[],long dimA,int B[],long dimB){
    
    long i,j,k=0;
    
    for(i=0;i<dimA;i++){
    
    for(j=0;j<dimB && (A[i]!=B[j]);j++){
    if(A[i]==B[j]) {A[k]=A[i];
    k++;}
    }
    }
    return k;}


    Dove sbaglio?
    Vi ringrazio in anticipo, ciauz!!

  2. #2
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,480
    Ma il problema qual e'?

    Se hai un errore, indica in quale riga si presenta ... se qualcosa non va come dovrebbe, descrivi cosa non va e quale comportamento ha il programma ...

  3. #3
    Allora non mi da errori da nessuna parte, seomplicemente quando mi deve stampare la grandezza del nuovo vettore ottenuto mi stampa zero, e quindi non viene creato il vettore.

  4. #4
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,480
    Scrivi in maniera chiara la funzione Com perche' cosi' come e' non si comprende ...

    Devi indentare il codice e presentarlo in maniera chiara. Ad esempio, associa le parentesi aperte con quelle chiuse ... nella funzione Com non sono in numero eguale ...

  5. #5
    veramente le parentesi aperte e chiuse sono uguali, altrimenti il compilatore mi avrebbe restituito qualche errore.
    Gli argomenti della funzione Com sono prima il vettore a[], poi il numero degli elementi di quest' ultimo n, poi passo il secondo vettore B[], e il numero degli elementi m.
    Poi leggendo attentamente il codice si può notare che analizzo ciascun elemento del primo vettore con ogni elemento del secondo, e se coincidono aumento il valore k e copio l' elemento nel vettore A[k].
    Poi faccio ritornare il valore k per poi ristampare il nuovo vettore.

    Ora a me non fa ritornare nessun valore k, come se non avessero nessun elemnto in comune, pure se dò come input due vettori uguali.

    Ora più di così non so che dirti e specificare.
    Ciauz!

  6. #6
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,480
    codice:
    long Com(int A[],long dimA,int B[],long dimB){
    
    for(i=0;i<dimA;i++){
    
    for(j=0;j<dimB && (A[i]!=B[j]);j++){
    3 parentesi aperte

    codice:
    k++;}
    }
    }
    return k;}
    e 4 chiuse ...

    Se il tuo codice e' diverso da quello che presenti, non si puo' capire dove sia il problema ...

  7. #7
    Non voglio fare l' antipatico ma adesso ti ho specificato ancora meglio!


    long Com(int A[],long dimA,int B[],long dimB){ <-- La prima

    long i,j,k=0;

    for(i=0;i<dimA;i++){ <-- La seconda

    for(j=0;j<dimB && (A[i]!=B[j]);j++){ <-- La terza
    if(A[i]==B[j]) { <--La quarta A[k]=A[i];
    k++;}<--La prima chiusa
    }<-- La seconda chiusa
    }<-- la terza chiusa
    return k;}<-- La quarta chiusa

  8. #8
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,480
    Ok ... non l'avevo vista perche' il codice non e' indentato (questa e' una conseguenza grave del codice scritto senza indentazione ... se un mio studente scrivesse una cosa del genere, neanche gli correggerei il compito ... ).

    La condizione

    A[i]!=B[j]

    che hai inserito nella seconda for, non ti consentira' mai di passare alla if ...

    E non mi sembra che basti ...

  9. #9
    Ho corretto l' es, ora viene, farò tesoro dei tuoi suggerimenti ovviamente, sperando di non essere un tuo studente!
    Ecco l' esercizio corretto!

    codice:
    #include<stdio.h>
    long Com(int A[],long dimA,int B[],long dimB);
    
    
    int main(){
    long n,m;
    printf("Inserisci due valori n e m\n");
    scanf("%ld%ld",&n,&m);
    
    
    printf("Inserisci i valori del primo vettore\n");
    int a[n],b[m];
    long x,j,z;
    for(x=0;x<n;x++){
    scanf("%d",&a[x]);}
    
    printf("Inserisci i valori del secondo vettore\n");
    for(j=0;j<m;j++){
    scanf("%d",&b[j]);}
    
    long s=Com(a,n,b,m);
    
    printf("La lunghezza del nuovo vettore modificato è %ld\n",s);
    printf("Il vettore modificato è uguale a...\n");
    
    for(z=0;z<s;z++){
    printf("%d\n",a[z]);}}
    
    
    long Com(int A[],long dimA,int B[],long dimB){
    
    long i,j,k=0;
    
    for(i=0;i<dimA;i++){
    long j=0;
    while(j<dimB && A[i]!=B[j]) j++;
    if(A[i]==B[j]) {A[k]=A[i];
    k++;}
    }
    
    return k;}
    Ho corretto nella funzione il while al posto del for, in mondo che ogni volta ricominci il controllo dal primo elemento!

  10. #10
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,480
    Ok ma l'indentazione e' *necessaria* ... il codice dovrebbe essere presentato cosi' ...

    codice:
    #include <stdio.h>
    
    long Com(int A[],long dimA,int B[],long dimB)
    {
       long i, j, k=0;
    
       for(i=0;i<dimA;i++)
       {
          long j=0;
    
          while(j<dimB && A[i]!=B[j]) j++;
    
          if(A[i]==B[j])
          {
             A[k]=A[i];
             k++;
          }
       }
    
       return k;
    }
    
    
    int main()
    {
       long n,m;
    
       printf("Inserisci due valori n e m\n");
       scanf("%ld%ld",&n,&m);
    
       printf("Inserisci i valori del primo vettore\n");
       int a[n],b[m];
       long x,j,z;
       for(x=0;x<n;x++)
          scanf("%d",&a[x]);
    
       printf("Inserisci i valori del secondo vettore\n");
       for(j=0;j<m;j++)
          scanf("%d",&b[j]);
    
       long s=Com(a,n,b,m);
    
       printf("La lunghezza del nuovo vettore modificato è %ld\n",s);
       printf("Il vettore modificato è uguale a...\n");
    
       for(z=0;z<s;z++)
          printf("%d\n",a[z]);
    
       return(0);
    }

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.