[C] Array

di il
5 risposte

[C] Array

Non capisco per qual motivo questo programma non funzioni
In particolare, anche se metto valori uguali, mi dice che sono diversi
sicuramente mi sto perdendo qualcosa di banale ma non capisco cosa...
#include<stdio.h>
#include<stdlib.h>

int main(){
	const int MAXN = 30;
	int vet[MAXN];
	int i, n, err = 0;
	// int b=0; //costanti per controllare che siano uguali
	int cont=0; //contatore per vedere se il ciclo fa N giri o no

	do{
	printf("Quanti elementi deve avere questo vettore?");
	scanf("%d", &n);

	if(n<0 || n>MAXN) {
		printf("Numero di elementi impossibile");
		err = 1;
	}
	}while(err == 1);

	for(i=0; i<n; i++){
		printf("Inserisci %d elemento:", i+1);
		scanf("%d", &vet[i]);
	}

	do{
	//	printf("%d", vet[cont]);
		cont++;
		if(vet[cont]!=vet[cont-1]){
			printf("Gli elementi non sono uguali");
					exit(0);
		}
	}while (cont<n);

	printf("\n\nGli elementi dell'array sono uguali");
	return(0);
}

5 Risposte

  • Re: [C] Array

    EDIT:Stavo postando da un altra parte sry
  • Re: [C] Array

    Probabilmente esiste qualcosa di più efficiente e meno macchinoso epr risolvere il tuo problema, ma a quest'ora questo è quello che posso offrirti!
    
       int flag =0;
       for(i=0;i<n;i++)
       {
           for(j=0;j<n;j++)
           {
               if(vet[i]==vet[j])
               {
                   flag++;
               }
           }
       }
       if(flag<=n)
                 printf("gli elementi sono divesi");
       else 
                  printf("\n\nGli elementi dell'array sono uguali");
    
  • Re: [C] Array

    Grazie! Ma più che sapere come farlo, vorrei sapere perché non funziona come l'ho scritto io
  • Re: [C] Array

    Comunque nemmeno il tuo algoritmo funziona infatti in questo modo basta che due siano uguali perché flag diventi > di n. Ho messo nell'if anche la condizione j != i ma non è sufficiente nel casi in cui ci siano molte coordinate uguali...
    Ho risolto così:
     for(i=0;i<n;i++)
    	   {
    	       for(j=0;j<n;j++)
    	       {
    	           if(vet[i]!=vet[j])
    	           {
    	               flag++;
    	           }
    	       }
    	   }
    	   if(flag==0)
    	             printf("gli elementi sono uguali");
    	   else
    	              printf("\n\nGli elementi dell'array sono diversi");
    ma ancora non ho capito perché il mio codice iniziale non andasse bene
  • Re: [C] Array

    Rain ha scritto:


    comunque nemmeno il tuo algoritmo funziona infatti in questo modo basta che due siano uguali perché flag diventi > di n.
    Eh io avevo capito che bastase che due numeri all'interno dell'array avrebbero dovuto essere uguali per ottenere esito positivo.
Devi accedere o registrarti per scrivere nel forum
5 risposte