Problema con il secondo vettore

di il
12 risposte

Problema con il secondo vettore

Salve, devo fare questo programma: Scrivere un programma in linguaggio C che legge N numeri interi da tastiera e li memorizza in un vettore.
Il numero N viene inserito dall'utente ed è minore di 20. Il programma deve generare un secondo vettore
che compatta i numeri del primo vettore. In particolare:
-ogni numero che compare ripetuto nel primo vettore, deve essere scritto una volta nel secondo vettore,
-ogni numero uguale a zero nel primo vettore non deve comparire nel secondo vettore.
Il programma deve visualizzare il contenuto del secondo vettore. Ad esempio, si supponga che N=8 e si
consideri la sequenza di numeri: 1 18 3 0 24 3 6 0 inseriti da tastiera. Il programma deve visualizzare
1 18 3 24 6.

Ma sto avendo alcuni problemi con il codice, non riesco a capire cosa non vada. Questo è il codice:

#include<stdio.h>
#define N 20

int comp(int vett1[], int n){
	int vett2[N], i, j=0, k;
	int stop;  //se stop=1 non devo inserire, se stop=0 devo inserire
	
	
	for(i=0;i<n;i++){
		stop=0;
		for(k=0;k<j;k++){
			if(vett1[i]==vett2[k] || vett1[i]==0){
				stop=1;
			}
			if(stop==0){
				vett2[j]=vett1[i];
				j++;
			}
		}
	}
	printf("il secondo vettore e':");
	for(i=0;i<j;i++){
		printf("%d\n",vett2[i]);
	}
}

void main(){
	int vett1[N], i, n;
	
	printf("Inserire la quantita' di numeri nel vettore (minore di 20):");
	scanf("%d",&n);
	
	printf("inserisci i numeri del vettore:");
	for(i=0;i<n;i++){
		scanf("%d",&vett1[i]);
	}
	
	comp(vett1, n);
}
Il secondo vettore mi esce vuoto..

12 Risposte

  • Re: Problema con il secondo vettore

    E' int main(), non void main() che è vietato da decenni

    void comp(), non int comp() dato che non hai return value.
    for(k=0;k<j;k++)
    j è zero: come ci entri nel for?
    if(vett1[i]==vett2[k] || vett1[i]==0)
    Quando entrarai nel for, cosa starai comparando? Quanto vale vett2[k] ?
  • Re: Problema con il secondo vettore

    
    for(k=0;k<j;k++)
    
    All'inizio k=0=j e non entra nel ciclo. Potresti risolvere con un do... while.
  • Re: Problema con il secondo vettore

    Weierstrass ha scritto:


    E' int main(), non void main() che è vietato da decenni

    void comp(), non int comp() dato che non hai return value.
    for(k=0;k<j;k++)
    j è zero: come ci entri nel for?
    if(vett1[i]==vett2[k] || vett1[i]==0)
    Quando entrarai nel for, cosa starai comparando? Quanto vale vett2[k] ?
    si, so che nel ciclo ci sta un problema, cioè nel primo tentativo j=0 quindi non entra a prescindere nel ciclo e quindi pure se mettessi 0 come primo numero lo lascerebbe. So che è un problema ma prima vorrei almeno mi visualizzasse i numeri, poi penso a quello ahaha.
    Nel secondo caso hai ragione, mi sa che vett2[k] non ha valore in quel momento, ma non so effettivamente come fargli capire il concetto del "se ci sono due numeri uguali".. come potrei scrivere nell'if?
  • Re: Problema con il secondo vettore

    Alexv ha scritto:


    
    for(k=0;k<j;k++)
    
    All'inizio k=0=j e non entra nel ciclo. Potresti risolvere con un do... while.
    si, so che nel ciclo ci sta un problema, cioè nel primo tentativo j=0 quindi non entra a prescindere nel ciclo e quindi pure se mettessi 0 come primo numero lo lascerebbe. So che è un problema ma prima vorrei almeno mi visualizzasse i numeri, poi penso a quello ahaha. Ma poi proverò a metterci un ciclo do-while :)
  • Re: Problema con il secondo vettore

    Se non entra nel ciclo, non mette niente nel vettore e quindi non visualizza niente.
  • Re: Problema con il secondo vettore

    Alexv ha scritto:


    Se non entra nel ciclo, non mette niente nel vettore e quindi non visualizza niente.
    vabe scusa, non dovrebbe non entrare solo la prima volta? cioè saltato il primo numero dovrebbe entrare no? visto l'incremento
  • Re: Problema con il secondo vettore

    J aumenta solo in quel sotto ciclo. Se non entra la prima volta perché j=0, non entrerà neanche in quelle successive.
  • Re: Problema con il secondo vettore

    Alexv ha scritto:


    J aumenta solo in quel sotto ciclo. Se non entra la prima volta perché j=0, non entrerà neanche in quelle successive.
    ah okok, quindi mi consigli di fare un do-while?
  • Re: Problema con il secondo vettore

    È un modo. Ma hai capito perché? Non solo, il secondo if va fuori dal ciclo perché il numero lo devi copiare una volta sola.
  • Re: Problema con il secondo vettore

    Alexv ha scritto:


    È un modo. Ma hai capito perché? Non solo, il secondo if va fuori dal ciclo perché il numero lo devi copiare una volta sola.
    nop, puoi spiegare?
  • Re: Problema con il secondo vettore

    Per ogni numero del primo vettore (ciclo esterno), controlli se è zero, lo cerchi nel secondo vettore (ciclo interno) e solo dopo, se non è stato trovato, lo copi.
  • Re: Problema con il secondo vettore

    Alexv ha scritto:


    Per ogni numero del primo vettore (ciclo esterno), controlli se è zero, lo cerchi nel secondo vettore (ciclo interno) e solo dopo, se non è stato trovato, lo copi.
    ah okay, grazie mille :)
Devi accedere o registrarti per scrivere nel forum
12 risposte