Pagina 1 di 3 1 2 3 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 21

Discussione: Somma valori in C

  1. #1

    Somma valori in C

    Ciao a tutti, io ho questi numeri 2 3 4 5 6
    e calcolo le somme parziali, ossia
    2+3.. +4.. +5..+6 e poi inizia dal numero 3.. 3+4..+5.. +6

    Io invece voglio che il 2 rimanga fermo e che sommi il 2 a tutti gli altri,
    cioè 2+3 vedo la somma,2+4 vedo la somma ,2+5, 2+6
    e poi inizio di nuovo da 3, cioè 3+4, 3+5 etc..
    Posso modificare questo codice o lo devo buttare via???

    codice:
    #include <stdio.h>
    #include <stdlib.h>
    
    int main(void)
     {
    int numero ; /* numero inserito */
    int conta ; /* conta quanti numeri sono inseriti */
    int sommaP ; /* somma dei numeri inseriti */
    int somma2, somma3, somma4, somma5;
    const int MAXN = 100;
    int i; //indice dei cicli
    int j, m, n , o;
    int vet[MAXN];
    int N ; //dimensione vettore
    sommaP = 0 ;
    somma2 = 0;
    somma3 = 0;
    somma4 = 0;
    somma5 = 0;
    
    
    do
    {
    printf("Quanti numeri saranno inseriti? ") ;
    scanf("%d",&N) ;
    /* LA DIMENSIONE MASSIMA DEL VETTORE E’ COMPRESA TRA 1 E MAXN */
    if ( N > MAXN || N <=0 )
     printf("Errore: il numero deve essere compreso tra %d e 0\n",MAXN) ;
    }
    while ( N > MAXN || N <=0 ) ;
    /* LEGGO UNA SEQUENZA DI N NUMERI INTERI, E LI MEMORIZZO IN UN VETTORE */
    printf("Inserisci una sequenza di %d numeri\n", N) ;
    for ( i=0; i<N; i++ )
    {
    printf("Elemento %d: ", i+1) ;
     scanf("%d", &vet[i]) ;
    }
    /* STAMPO IL VETTORE DI INTERI */
    printf("La sequenza inserita e’ la seguente\n") ;
    for ( i=0; i<N; i++ )
    printf("Elemento %d: %d\n", i+1, vet[i]) ;
    printf("\n") ;
    
    
    for ( i=0; i<N;i++)
    {
    
       sommaP = sommaP + vet[i];
    
     printf ("La Prime somme parziali del vettore e' %d\n",sommaP);
    
    }
    
    for ( j=1; j<N;j++)
    {
    
       somma2 = somma2 + vet[j];
    
     printf ("La Seconde somme parziali del vettore e' %d\n",somma2);
    }
    
    for ( m=2; m<N;m++)
    {
    
       somma3 = somma3 + vet[m];
    
     printf ("La terze somme parziali del vettore e' %d\n",somma3);
    
    }
    
    for ( n=3; n<N;n++)
    {
    
       somma4 = somma4 + vet[n];
    
     printf ("La Quarte somme parziali del vettore e' %d\n",somma4);
    
    }
    
    for ( o=4; o<N;o++)
    {
    
       somma5 = somma5 + vet[o];
    
     printf ("La Quinte somme parziali del vettore e' %d\n",somma5);
    
    }
    
    
    
    system("PAUSE");
    exit(0) ;
    }

  2. #2
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,465
    Non ho visto il codice ma per fare quello che hai chiesto basta

    codice:
    	int min = 2, max = 6;
    	int i, j;
    
    	for(i=min; i<max; i++)
    		for(j=i+1; j<=max; j++)
    			printf("%d + %d = %d\n", i, j, i+j);
    No MP tecnici (non rispondo nemmeno!), usa il forum.

  3. #3
    Utente di HTML.it L'avatar di torn24
    Registrato dal
    Aug 2008
    Messaggi
    551

    ciao

    Ti sei spiegato a parole molto male , e non si capisce cosa vuoi fare a parole .

    dall'esempio si può intuire , cosa vuoi ottenere , io suggerirei di riscrivere il programma , visto che si tratta di poche righe .....

    Dovresti procedere come segue

    metti gli operandi del primo addendo in un array
    il secondo operando lo metti in un altro array "questo per semplificare il codice " ma si potrebbe usare lo stesso array inizializzato sia per primo addendo che per secondo

    usi due variabili int uno che indica il primo addendo e una che indica il secondo addendo , che incrementerai a dovere

    stampi i risultati


    Qualcosa del genere , come inserirai i valori nel vettore dipende da te .

    codice:
    #include <stdio.h>
    #include <stdlib.h>
    
    int main(int argc, char *argv[])
    {
    int addendi[]={2,3,4,5,6};
    int indice=0;
    int primo_addendo=addendi[indice];
    int secondo_addendo=addendi[indice+1];
    int i,j;
    for(j=0;j<5;j++)
    
    {
    
        primo_addendo=addendi[indice];
        
        for(i=indice+1;i<5;i++)
        {
             secondo_addendo=addendi[i];
             printf("somma parziale di %d + %d = %d   \n",primo_addendo,secondo_addendo,primo_addendo+secondo_addendo);
    
    
        }
        puts("========================================================");
        indice++;
    }
    
      system("PAUSE");	
      return 0;
    }
    Tecnologia

  4. #4

    Re: ciao

    Originariamente inviato da torn24
    Ti sei spiegato a parole molto male , e non si capisce cosa vuoi fare a parole .

    dall'esempio si può intuire , cosa vuoi ottenere , io suggerirei di riscrivere il programma , visto che si tratta di poche righe .....

    Dovresti procedere come segue

    metti gli operandi del primo addendo in un array
    il secondo operando lo metti in un altro array "questo per semplificare il codice " ma si potrebbe usare lo stesso array inizializzato sia per primo addendo che per secondo

    usi due variabili int uno che indica il primo addendo e una che indica il secondo addendo , che incrementerai a dovere

    stampi i risultati


    Qualcosa del genere , come inserirai i valori nel vettore dipende da te .

    codice:
    #include <stdio.h>
    #include <stdlib.h>
    
    int main(int argc, char *argv[])
    {
    int addendi[]={2,3,4,5,6};
    int indice=0;
    int primo_addendo=addendi[indice];
    int secondo_addendo=addendi[indice+1];
    int i,j;
    for(j=0;j<5;j++)
    
    {
    
        primo_addendo=addendi[indice];
        
        for(i=indice+1;i<5;i++)
        {
             secondo_addendo=addendi[i];
             printf("somma parziale di %d + %d = %d   \n",primo_addendo,secondo_addendo,primo_addendo+secondo_addendo);
    
    
        }
        puts("========================================================");
        indice++;
    }
    
      system("PAUSE");	
      return 0;
    }
    Questo codice va bene, solo che non mi fa vedere i primi numeri, perché voglio visualizzare anche il numero da cui parte, tipo
    2 - 2+3 - 2+4 - 2+5
    3 - 3+4 e così via..

  5. #5
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,465
    Quello che ti ho proposto non va?
    No MP tecnici (non rispondo nemmeno!), usa il forum.

  6. #6
    Si, ho fatto tante soluzioni, ma non riesco a considerare anche il primo valore, nel senso che voglio stampare il numero + 0 e considerarlo nelle somme parziali..

    dato il vettore = {3,4,5}
    voglio che visualizzo: 3,7, 8....4,9... 5

    non capisco perché non funziona, perché nell'indice parto sempre da 0..

  7. #7
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,465
    Allora modificando il codice che ti avevo mostrato, dato che le cose sono un po' diverse da come avevi detto prima

    codice:
    	int vec[] = {3,4,5};
    	int i, j, size = sizeof(vec)/sizeof(int);
    
    	for(i=0; i<size; i++)
    	{
    		printf("%d ", vec[i]);
    		
    		for(j=i+1; j<size; j++)
    			printf("%d ", vec[i]+vec[j]);
    	}
    questo dovrebbe andare
    No MP tecnici (non rispondo nemmeno!), usa il forum.

  8. #8
    si si è proprio quello che volevo fare, grazie mille, ora con quel risultato voglio calcolarmi le occorrenze , es:
    3 =1;
    8 = 2;
    13= 1;
    10 =3;
    17 = 1;
    e poi stampare il numero con più occorrenze, quindi k=3

    io mi sono scritta un programma e mi sono calcolata le occorrenze, solo che con il codice di sopra non ho capito se devo utilizzare il vec[i] o se i dati ottenuti delle somme parziali le devo inserire in un altro array.
    Ora vi posto il codice:
    codice:
    #include <stdio.h>
    #include <stdlib.h>
     int main(void)
    {
    const int MAXN = 20 ; /* dimensione massima del vettore */
    int vet[MAXN] ; /* serie di numeri interi */
     int compatto[MAXN] ; /* serie compatta di numeri interi:
    contiene, senza ripetizione, i valori del
    vettore "vet" */
    int N ; /* dimensione del vettore "vet" */
    int N_compatto ; /* dimensione del vettore "compatto" */
     int i, j, t ; /* indici dei cicli */
    int trovato ; /* flag per la ricerca */
    int occorrenze; /* numero di occorrenze */
    /* LEGGI LE DIMENSIONI DEL VETTORE */
     do
    {
    printf("Quanti numeri saranno inseriti? ") ;
    scanf("%d",&N) ;
     /* LA DIMENSIONE MASSIMA DEL VETTORE E’ COMPRESA TRA 1 E MAXN */
    if ( N > MAXN || N <=0 )
    printf("Errore: il numero deve essere compreso tra %d e 0\n",
    MAXN) ;
    }
     while ( N > MAXN || N <=0 ) ;
    /* LEGGI UNA SERIE DI N NUMERI INTERI, MEMORIZZANDOLI IN UN VETTORE */
    printf("Inserisci il vettore di %d elementi\n", N) ;
    for ( i=0; i< N; i++ )
     {
    printf("Elemento %d: ", i+1) ;
    scanf("%d", &vet[i]) ;
    }
    printf("\n") ;
    /* STAMPA IL VETTORE DI INTERI */
    printf("Stampa del vettore inserito\n") ;
    for ( i=0; i<N; i++ )
    printf("Elemento %d: %d\n", i+1, vet[i]) ;
     printf("\n") ;
    /* AGGIORNA IL VETTORE "compatto" E CALCOLA IL NUMERO DI OCCORRENZE */
    /* INIZIALMENTE IL VETTORE "compatto" NON CONTIENE NESSUN NUMERO */
     N_compatto = 0 ;
    /* IL CICLO FOR SCANDISCE IL VETTORE "vet1" */
    for ( i=0; i< N; i++ )
    {
     /* INIZIALIZZA IL FLAG "trovato". IL FLAG ASSUME I VALORI
    -- "trovato" E’ UGUALE A 0 SE IL VETTORE "compatto" NON CONTIENE
    IL VALORE IN "vet[i]"
    -- "trovato" E’ UGUALE A 1 SE IL VETTORE "compatto" CONTIENE
    IL VALORE IN "vet[i]" */
     trovato=0 ;
    /* PER OGNI ELEMENTO vet1[i] DI vet1, IL CICLO FOR SCANDISCE IL VETTORE
    "compatto" E VERIFICA SE "compatto" CONTIENE IL VALORE IN "vet1[i]"
    70 LA RICERCA TERMINA QUANDO SI TROVA UNA CELLA "compatto[j]"
    UGUALE A "vet1[i]" O QUANDO SONO STATE CONSIDERATE TUTTE LE CELLE
    DEL VETTORE "compatto" */
    for ( j=0; j< N_compatto && trovato==0; j++ )
     {
    /* SE "compatto" CONTIENE "vet1[i]", AGGIORNA IL FLAG "trovato" */
    if ( compatto[j] == vet[i] )
    trovato = 1 ;
    }
    
    if ( trovato == 0 )
    {
    /* SE "trovato" E’ UGUALE A 0, COPIA NEL VETTORE "compatto" IL
    VALORE IN "vet[i]" */
     compatto[N_compatto] = vet[i] ;
    N_compatto = N_compatto + 1 ;
    /* CALCOLA IL NUMERO DI OCCORRENZE DI "vet[i]" NEL VETTORE "vet".
    IL CICLO FOR SCANDISCE IL VETTORE "vet" E CONTA QUANTE VOLTE
    90 IL VALORE IN "vet[i]" E’ PRESENTE NEL VETTORE "vet" */
    occorrenze = 0 ;
    for ( t=0; t< N; t++ )
    {
    if ( vet[t] == vet[i] )
     occorrenze = occorrenze + 1 ;
    }
    /* STAMPA DELLE OCCORRENZE */
    printf("Elemento %d: %d, occorrenze %d\n", i+1, vet[i], occorrenze) ;
     }
    }
    exit(0) ;
    }

  9. #9
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,465
    Purtroppo il codice che hai mostrato non è indentato e risulta molto molto confuso ...

    In ogni caso, quei valori di occorrenza

    3 =1;
    8 = 2;
    13= 1;
    10 =3;
    17 = 1;

    a quali dati in input si riferiscono?
    No MP tecnici (non rispondo nemmeno!), usa il forum.

  10. #10
    Il codice che ho scritto è in base a un vettore di input, ma non so come calcolarlo su dei valori di output, perché non so se farlo dentro quel ciclo for o se mi devo creare un altro vettore per memorizzarmi quei dati ottenuti e lavorare su quello. Solo che ho paura che l'algoritmo sia prima di tutto sbagliato e poi inefficiente

    codice:
    int vec[] = {3,5,10,7,5};
    	int i, j, size = sizeof(vec)/sizeof(int);
    
    	for(i=0; i<size; i++)
    	{
    		printf("%d ", vec[i]);
    		
    		for(j=i+1; j<size; j++)
    			printf("%d ", vec[i]+vec[j]);
    	}
    Le occorrenze le voglio calcolare sull'output di questo e mi risulta questo
    3 -8-13-10-8-5-15-12-10-10-17-15-7-12

    quindi calcolando le occorrenze mi dovrebbe risultare :3 =1;
    8 = 2;
    13= 1;
    10 =3;
    17 = 1;

    e voglio stampare il valore più alto delle ricorrenze, cioè Z=3

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