Visualizzazione dei risultati da 1 a 4 su 4
  1. #1
    Utente di HTML.it
    Registrato dal
    Sep 2011
    Messaggi
    10

    [C] Array con ripetizioni

    Ciao, a tutti, ho iniziato a studiare il C perchè mi piacerebbe imparare a programmare.
    E' un paio di mesi che lo studio e ora mi trovo davanti ad un esercizio che non riesco ad affrontare, questo è il testo:

    Dato un array di N interi, con possibili ripetizioni di valori e non ordinato, si vuol sapere qual'è il valore (o quali sono i valori) col maggior numero di ripetizioni. il contenuto dell'array non dev'essere modificato.

    Ora, io ho scritto questo codice:

    codice:
    void main ()
    
    {
    	int n;
    	int a [100];
    	int i;
    	int cont=0;
    	printf("Quanti valori vuoi assegnare all'Array?: ");
    	scanf("%d",&n);
    
    	for(i=0; i<=n-1 ;i++) //carico vettore
    	{
    		printf("inserisci valori array: ");
    		scanf("%d",&a[i]);
    	}
    	for (i=0; i<=n-1 ;i++)
    	{
    		if (a[i]==a[i+1])
    			cont=cont+1;
    	}
    	printf("%d",&cont);
    	getch();
    }
    Non riesco a capire il perchè non mi stampi ciò che è richiesto. L'errore sta di sicuro nella condizione dell' "if", però non capisco perchè.

    Grazie a tutti per l'aiuto.


    Enrico

  2. #2
    Utente di HTML.it
    Registrato dal
    May 2009
    Messaggi
    225
    la printf si usa così

    codice:
        printf("%d",cont);
    controlla però l'algoritmo che non mi sembra faccia quello che desideri.

    ciao
    sergio

  3. #3
    Utente bannato
    Registrato dal
    Oct 2010
    Messaggi
    1,219
    codice:
    for (i=0; i<=n-1 ;i++)      // i<n-1 ,altrimenti confronti a[n-1] con a[n], ma a[n] non è stato allocato
    	{
    		if (a[i]==a[i+1])
    			cont=cont+1;
    	}
    Questo codice non calcola quante volte si ripete un valore, ma calcola quante volte due valori adiacenti dell' array sono uguali.
    La condizione:
    codice:
    if(a[i]==a[i+1]
    Risulta vera se e solo se due elementi adiacenti si ripetono.
    Se ad esempio a[1]=5 e a[3]=5, con questo algoritmo ciò non viene contato come una ripetizione.
    Se vuoi calcolare quante volte due numeri generici si ripetono,l' algoritmo deve essere quadratico:
    codice:
    for(j=0;j<n-1;i++)
        for(i=0;i<n-1;i++)
            if(a[j]==a[i])
                cont++;
    Se invece vuoi calcolare quale valore si ripete di più (ad esempio contare quante volte si ripete il 7),allora ti conviene creare una struttura che contiene il numero, e quante volte si ripete:
    codice:
    typedef struct
    {
        int num;
        int rip;
    }valore;
    Scandisci tutto l' array, ogni volta che trovi un valore verifichi se non sia già presente nelle strutture, se è già presente incrementi rip, altrimenti crei una struttura nuova con rip=1.

  4. #4
    Utente di HTML.it
    Registrato dal
    Sep 2011
    Messaggi
    10
    Grazie mille, siete stati utilissimi

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.