Visualizzazione dei risultati da 1 a 9 su 9
  1. #1

    [C] Dato un vettore di 10 numeri sommare quelli che si ripetono

    salve a tutti il problema che ho in questo codice è che se inserisco in ingresso più di 2 numeri uguali mi fa la somma solo di al massimo 2 numeri

    codice:
    #include<stdio.h>
    #include<iostream>
    #define N 10
    int main()
    {
        int v[N];
        int c=0;            
        int somma=0;
    
        for(c=0;c<N;c++)
        {
          printf("Inserisci un numero intero");
          printf("\n");
          scanf("%d",&v[c]);
        }
        
        for(c=0;c<N;c++)
        {    
          if(v[c]==v[c+1])
          {
             somma=v[c]+v[c+1]; 
          }
                
            
        }
    
        printf("La somma dei numeri e' : %d",somma);
        printf("\n"); 
    
        system("pause");
    }

  2. #2
    Utente di HTML.it
    Registrato dal
    Dec 2009
    Messaggi
    1,123
    Non può funzionare in questo modo. Non puoi controllare solo il numero successivo, altrimenti sommerai solo quelli...

  3. #3
    Originariamente inviato da Patrick Jane
    Non può funzionare in questo modo. Non puoi controllare solo il numero successivo, altrimenti sommerai solo quelli...
    infatti era quello che ho intuito anche io , a posto di v[c+1] cosa dovrei mettere?

  4. #4
    Utente di HTML.it L'avatar di Scara95
    Registrato dal
    Jul 2009
    residenza
    Zimella (VR)
    Messaggi
    2,589
    Un for che controlla i numeri succeccivi e se sono uguali a quello li somma al risultato e gli esclude dall'array.
    Oppure creare una struttura dati che per ogni numero ha un valore con il numero di volte in cui appare e alla fine utilizzare la moltiplicazione per sapere il risultato.
    Credo che esistano altre possibilità, queste sono quelle che mi vengono in mente ora...
    "Quid enim est, quod contra vim sine vi fieri possit?" - Cicerone, Ad Familiares

  5. #5
    Originariamente inviato da Scara95
    Un for che controlla i numeri succeccivi e se sono uguali a quello li somma al risultato e gli esclude dall'array.
    Oppure creare una struttura dati che per ogni numero ha un valore con il numero di volte in cui appare e alla fine utilizzare la moltiplicazione per sapere il risultato.
    Credo che esistano altre possibilità, queste sono quelle che mi vengono in mente ora...
    ho provato a modificarlo cosi ma ancora non viene, per esempio se inserisco tre volte 2 invece che 6 mi stampa 16

    codice:
    #include<stdio.h>
    #include<iostream>
    #define N 10
    int main()
    {
         int v[N];
         int copia_v[N];
         int c=0; 
         int cont_1=0;
         int somma=0;
    
         for(c=0;c<N;c++)
         {
           printf("Inserisci un numero intero");
           printf("\n");
           scanf("%d",&v[c]);
           copia_v[c]=v[c];
          }
    
          for(c=0;c<N;c++)
          { 
            for(cont_1=0;cont_1<N;cont_1++)
            {
              if(v[c]==copia_v[c])
              {
                somma=copia_v[c]+v[c]; 
              }
            }
          }
          printf("La somma dei numeri e' : %d",somma);
          printf("\n"); 
    
          system("pause");
    }

  6. #6
    Utente di HTML.it
    Registrato dal
    Dec 2009
    Messaggi
    1,123
    Una delle cose furbe che puoi fare è ordinarli prima di contarli.
    Esempio:
    codice:
    numeri <-- {5,10,34,21,9,2,2,4,5,10};
    sort(numeri);
    numeri = {2,2,4,5,5,9,10,10,21,34};
    In questo modo puoi prendere il numero alla posizione i-esima, e verificare quante uguaglianze ha. Quandi rilevi un numero diverso, lo assegni alla variabile temporanea e continui a contare.

    codice:
    int occorrenze = 0;
    int temp = numeri[0];
    for(int i=1; i<N; i++) {
      if(numeri[i] == temp) occorrenze ++;
      else temp = numeri[i];
    }
    Questo se devi sommare i numeri che si ripetono in generale (ovvero non puoi sapere quanti 2, quanti 5, quanti 100 ci sono (e le rispettive somme), conosci solo la somma di tutto).

  7. #7
    Originariamente inviato da Patrick Jane
    Una delle cose furbe che puoi fare è ordinarli prima di contarli.
    Esempio:
    codice:
    numeri <-- {5,10,34,21,9,2,2,4,5,10};
    sort(numeri);
    numeri = {2,2,4,5,5,9,10,10,21,34};
    In questo modo puoi prendere il numero alla posizione i-esima, e verificare quante uguaglianze ha. Quandi rilevi un numero diverso, lo assegni alla variabile temporanea e continui a contare.

    codice:
    int occorrenze = 0;
    int temp = numeri[0];
    for(int i=1; i<N; i++) {
      if(numeri[i] == temp) occorrenze ++;
      else temp = numeri[i];
    }
    codice:
    #include<stdio.h>
    #include<iostream>
    #define N 10
    int main()
    {
         int v[N];
         int c=0; 
         int occorrenze=0;
         int temp=numeri[0];
          
         for(c=0;c<N;c++)
         {
           printf("Inserisci un numero intero");
           printf("\n");
           scanf("%d",&v[c]);
          }
    
          for(c=0;c<N;c++)
          { 
              if(numeri[i]==temp)
              {
                occorrenze++;         
              }
              else temp = numeri[i];
          }
          printf("La somma dei numeri e' : %d",);
          printf("\n"); 
    
          system("pause");
    }
    come dovrei modificarlo adesso?

  8. #8
    Utente di HTML.it
    Registrato dal
    Dec 2009
    Messaggi
    1,123
    Devi ordinare i numeri dopo all'inserimento. Un semplice BubbleSort va bene. Una volta ordinati utilizzi il cdice che ti ho mostrato.

  9. #9
    Utente di HTML.it
    Registrato dal
    Feb 2007
    Messaggi
    4,157
    Originariamente inviato da valerio95
    come dovrei modificarlo adesso?
    non so se lo hai risolto o meno, provo a darti un metodo risolutivo (ho iniziato a seguire questa logica quando avevo davanti i primi programmi)
    Esci dal contesto "programmazione" e rispondi a questa domanda a parole tue, in italiano...cioè come faresti a rispondere a questa domanda:

    data una scatola con all'interno 10 biglie, su ogni biglia trovi scritto un numero intero a caso. Indicare la somma dei numeri ripetuti (numeri letti dalle biglie) ?

    Stesso dicasi se ti chiedessi di riordinare in ordine crescente/decrescente le biglie.

    Quando sai descrivere questo, portarlo in un programma è banale, anche se devi conoscere bene i fondamenti del linguaggio (quanto meno if e for)
    RTFM Read That F*** Manual!!!

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 © 2026 vBulletin Solutions, Inc. All rights reserved.