Questo sito utilizza cookies solo per scopi di autenticazione sul sito e nient'altro. Nessuna informazione personale viene tracciata. Leggi l'informativa sui cookies.
Username: Password: oppure
C/C++ - Chiarimenti su ARRAY
Forum - C/C++ - Chiarimenti su ARRAY

Avatar
francescosup (Normal User)
Newbie


Messaggi: 7
Iscritto: 08/11/2009

Segnala al moderatore
Postato alle 19:44
Domenica, 08/11/2009
Salve a tutti;
complimenti per il sito e forum!!!
Volevo chiedere qualche chiarimento sugli array.
Voglio fare un programma per sommare un certo numero (non definito) di valori, facendo uso di un array (quindi preferirei che non suggeriate altre strade che so benissimo esserci!!).

Cioè,insomma, l'utente deve immettere i valori che vuole sommare e questi automaticamente si salvano in una "cella" dell'array, fino a quando l'utente digita per esempio la cifra 000.
Quando digita 000, i valori salvati nell'array vengono sommati e il risultato viene mostrato all'utente...

Allora la mia richiesta è: come faccio a dichiarare questo array che non ha un valore preciso di celle.
Cioè io so che per dichiarare un array (per esempio di 10 celle) si fa così:
Codice sorgente - presumibilmente C/C++

  1. int array somma [10]



Ma se il num delle celle è variabile come faccio..
cioè devo avere un contatore legato all'array???

Grazie mille


PM Quote
Avatar
Guglielmo (Normal User)
Newbie


Messaggi: 20
Iscritto: 06/07/2009

Segnala al moderatore
Postato alle 20:02
Domenica, 08/11/2009
Devi andare ad utilizzare la gestione dinamica della memoria, ovvero l'utilizzo dei puntatori e delle relavitve funzioni di allocazione e riallocazione della memoria.

L'esempio di programma te lo posto lo stesso, comunque studiati bene come funzionano i puntatori perchè se no sarà difficile capire il codice.

Codice sorgente - presumibilmente C++

  1. #include <stdio.h>
  2. #include <stdlib.h>
  3.  
  4. #define FINE -9999
  5.  
  6. int main(int argc, char **argv) {
  7.  
  8.   int * vett;
  9.   int numTmp, size, somma;
  10.  
  11.   /* Inizializzazioni */
  12.   size = 1;
  13.   somma = 0;
  14.   numTmp = 0;
  15.   vett = (int*)malloc(sizeof(int)*size);
  16.  
  17.   printf("%d per terminare\n", FINE);
  18.   while (numTmp != FINE) {
  19.    
  20.     printf("%d-esimo valore? ", size);
  21.     scanf("%d", &numTmp);
  22.    
  23.     if (numTmp != FINE) {
  24.       vett[size-1] = numTmp;
  25.       somma += numTmp;
  26.       size++;
  27.       vett = (int*)realloc(vett, sizeof(int)*size);
  28.     }
  29.   }
  30.  
  31.   if (size != 1) {
  32.     printf("Somma di %d elementi => %d\n", size-1, somma);
  33.   }
  34.  
  35.   return 0;
  36. }


Ultima modifica effettuata da Guglielmo il 08/11/2009 alle 20:59
PM Quote
Avatar
francescosup (Normal User)
Newbie


Messaggi: 7
Iscritto: 08/11/2009

Segnala al moderatore
Postato alle 20:25
Domenica, 08/11/2009
Grazie mille per la risposta!!

Un altra cosa se nell'array voglio salvare una stringa..
In un array fatto di 4 celle, voglio salvare alla posizione 0 : "Michele"
alla posizione 1: "antonio"
alla posizione 3: .... ecc ecc.

Cioè non numeri ma stringhe!
Come faccio???

PM Quote
Avatar
Guglielmo (Normal User)
Newbie


Messaggi: 20
Iscritto: 06/07/2009

Segnala al moderatore
Postato alle 20:58
Domenica, 08/11/2009
Rispetto ad un semplice vettore le cose si complicano un pochino di più, perchè le stringhe non sono altre che puntatori a char.
Quindi avrai bisogno di un vettore di puntatori a char.
Esempio:

Codice sorgente - presumibilmente C++

  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #include <string.h>
  4.  
  5. #define FINE "\\fine"
  6. #define STR_SIZE 256
  7.  
  8. int main(int argc, char **argv) {
  9.  
  10.   char **vettStringhe;
  11.   char strTmp[STR_SIZE] = "";
  12.   int size, i;
  13.  
  14.   size = 1;
  15.   vettStringhe = (char**)malloc(sizeof(char*)*size);
  16.  
  17.   while (strcmp(strTmp, FINE) != 0) {  
  18.    
  19.     printf("%d-esima stringa? ", size);
  20.     scanf("%256s", strTmp);
  21.  
  22.     if (strcmp(strTmp, FINE) != 0) {
  23.       vettStringhe[size-1] = (char*)malloc(sizeof(char)*strlen(strTmp));
  24.       strcpy(vettStringhe[size-1], strTmp);
  25.       size++;
  26.       vettStringhe = (char**)realloc(vettStringhe, sizeof(char*)*size);
  27.     }
  28.   }
  29.  
  30.   if (size != 1) {
  31.     printf("Le %d stringhe inserite sono:\n", size-1);
  32.     for (i = 0; i < size-1; i++) {
  33.       printf("%s\n", vettStringhe[i]);
  34.     }
  35.   } else {
  36.     printf("Non sono state inserite stringhe.\n");
  37.   }
  38.  
  39.   return 0;
  40. }


PM Quote