|
|||||||
|
|
|
![]() |
|
|
Strumenti |
|
|
#1 |
|
Senior Member
Iscritto dal: Aug 2002
Messaggi: 3973
|
array di nomi
Ciao!!
Ho da sottoporre un problema che riguarda gli array (non ho ancora dimistichezza con gli array , anche se le cosa stanno migliorando) Vorrei: 1) creare due array 2 array i cui elementi (massimo 15 o 20) devono essere dei cognomi (del tipo: Rossi, Della Valle, Pisano, De Roberti ecc) i quali devono essere scelti ed inseriti dall'utente; 2) verificare quale cognome è il più lungo per ogni array e visualizzarlo a terminale; 3) quale dei 2 array ha il cognome più lungo e visualizzarlo (ovviamente può essere anche lo steso di prima) Quale potrebbe essere il codice? Io ci sto provando ma non riesco a risolvere il problema (scusate sono alle prime armi). Grazie anticipatamente. |
|
|
|
|
|
#2 |
|
Senior Member
Iscritto dal: Jun 2002
Città:
Provincia De VaRéSe ~ § ~ Lat.: 45° 51' 7" N Long.: 8° 50' 21" E ~§~ Magica Inter ~ § ~ Detto: A Chi Più Amiamo Meno Dire Sappiamo ~ § ~ ~ § ~ Hobby: Divertimento allo Stato Puro ~ § ~ ~ § ~ You Must Go Out ~ § ~
Messaggi: 8897
|
che linguaggio?
~§~ Sempre E Solo Lei ~§~
__________________
Meglio essere protagonisti della propria tragedia che spettatori della propria vita
Si dovrebbe pensare più a far bene che a stare bene: e così si finirebbe anche a star meglio. Non preoccuparti solo di essere migliore dei tuoi contemporanei o dei tuoi predecessori.Cerca solo di essere migliore di te stesso |
|
|
|
|
|
#3 |
|
Senior Member
Iscritto dal: Jun 2002
Città:
Provincia De VaRéSe ~ § ~ Lat.: 45° 51' 7" N Long.: 8° 50' 21" E ~§~ Magica Inter ~ § ~ Detto: A Chi Più Amiamo Meno Dire Sappiamo ~ § ~ ~ § ~ Hobby: Divertimento allo Stato Puro ~ § ~ ~ § ~ You Must Go Out ~ § ~
Messaggi: 8897
|
in c
const n = 20; void massimo (char cognomi[]) { int i, y; y=0; for (i=1;i<n;i++) { if (strlen(cognomi[i]) > strlen(cognomi[y]) { y=i; } } return cognomi[y]; } void carica (char cognomi []) { int i; for (i=0;i<n;i++) { printf ("Inserisci %d cognome",&i+1); fflush (stdin); gets (cognomi[i]); } } void main () { char cognomi1 [n][20]; char cognomi2 [n][20]; char cognome [2][20]; printf ("Caricamento primo array"); carica (cognomi1); printf ("Caricamento secondo array"); carica (cognomi2); cognome[0] = massimo (cognome1); cognome[1] = massimo (cognome2); //ocio che se esistono nomi della stessa lunghezza prende il primo e basta printf ("Massimo primo array %s",cognome[0]); printf ("Massimo secondo array %s",cognome[1]); if (strlen(cognome[0]) > (strlen(cognome[1]) { printf ("cognome di lung sup è %s",cognome[0]) } else{ if (strlen(cognome[0]) == (strlen (cognome[1]))) { print ("congomi della stessa lung %s e %s",cognome[0],cognome[1]); } else { printf ("cognome di lung mag %s", cognome[0]); } } } } per il basic basta che lo ritocchi con le sue istruzioni ~§~ Sempre E Solo Lei ~§~
__________________
Meglio essere protagonisti della propria tragedia che spettatori della propria vita
Si dovrebbe pensare più a far bene che a stare bene: e così si finirebbe anche a star meglio. Non preoccuparti solo di essere migliore dei tuoi contemporanei o dei tuoi predecessori.Cerca solo di essere migliore di te stesso Ultima modifica di Fenomeno85 : 21-02-2004 alle 23:24. |
|
|
|
|
|
#4 |
|
Member
Iscritto dal: Jun 2001
Messaggi: 19
|
#include <stdio.h>
#include <string.h> #define SIZE 2 /* questo definisce QUANTI cognomi (di cui ho settato la lunghezza max a 30) puoi immettere per array. cambialo se ne vuoi di +, ma per i test un valore basso è comodo. */ int main (void) { char nomi1[SIZE][30]; char nomi2[SIZE][30]; unsigned int i=0,k=0,h=0; unsigned int longest1=0,longest2=0,lonpos1=0,lonpos2=0; for (i=0; i<=SIZE; i++) { h=i+1; printf("Inserire %d° cognome per il primo array: ",h); fgets(nomi1[i],sizeof(nomi1),stdin); } printf("I cognomi inseriti nel primo array sono: \n"); do { for (i=0; i<=strlen(nomi1[k]); i++) { printf("%c",nomi1[k][i]); } k++; printf("\n"); } while (k<=SIZE); for (i=0; i<=SIZE; i++) { if (strlen(nomi1[i])>longest1) { longest1=strlen(nomi1[i]); lonpos1=i; } } printf("Il nome + lungo del primo array è: %s",nomi1[lonpos1]); printf("\n\n\n"); for (i=0; i<=SIZE; i++) { h=i+1; printf("Inserire %d° cognome per il secondo array: ",h); fgets(nomi2[i],sizeof(nomi2),stdin); } printf("I cognomi inseriti nel secondo array sono: \n"); k=0; do { for (i=0; i<=strlen(nomi2[k]); i++) { printf("%c",nomi2[k][i]); } k++; printf("\n"); } while (k<=SIZE); for (i=0; i<=SIZE; i++) { if (strlen(nomi2[i])>longest2) { longest2=strlen(nomi2[i]); lonpos2=i; } } printf("Il nome + lungo del secondo array è: %s",nomi2[lonpos2]); printf("\n\n\n"); printf("Comparazione tra i 2 array. \n\n"); if (longest1 > longest2) { printf("Il primo array contiene il cognome + lungo: %s",nomi1[lonpos1]); } else if (longest2 > longest1) { printf("Il secondo array contiene il cognome + lungo: %s",nomi2[lonpos2]); } else { printf("I 2 array contengono un cognome della medesima lunghezzaa. \n%s\n%s",nomi1[lonpos1],nomi2[lonpos2]); } return 0; } |
|
|
|
|
|
#5 |
|
Member
Iscritto dal: Jun 2001
Messaggi: 19
|
Ciao,
domani quando sarò + lucido, aggiungerò il caso in cui ci siano + cognomi della stessa lunghezza massima nel medesimo array, in modo che li stampi tutti, indipendentemente da quanti sono. Era complicato da gestire ed avevo sonno Altra cosa da fare, abbellire il tutto e raggruppare il raggruppabile in procedure e funzioni. Spero cmq che tutto ciò serva a darti un'idea generale su un possibile modo di affrontare il problema. Se hai qualche domanda chiedi pure, se sono in grado di rispondere lo farò |
|
|
|
|
|
#6 |
|
Senior Member
Iscritto dal: Jun 2002
Città:
Provincia De VaRéSe ~ § ~ Lat.: 45° 51' 7" N Long.: 8° 50' 21" E ~§~ Magica Inter ~ § ~ Detto: A Chi Più Amiamo Meno Dire Sappiamo ~ § ~ ~ § ~ Hobby: Divertimento allo Stato Puro ~ § ~ ~ § ~ You Must Go Out ~ § ~
Messaggi: 8897
|
mmm perchè ti devi complicare la vita nella visaulizzazione dei cognomi???
do { for (i=0; i<=strlen(nomi1[k]); i++) { printf("%c",nomi1[k][i]); } k++; printf("\n"); } while (k<=SIZE); ti basta fare for (i=0;i<SIZE;i++) { puts (nomi1[i]); //oppure usi printf con %s } poi ti conveniva come avevo fatto io mettere sotto funzioni così oltre che a essere più leggibile scrivi meno codice e quindi meno probabilità di errore. ~§~ Sempre E Solo Lei ~§~
__________________
Meglio essere protagonisti della propria tragedia che spettatori della propria vita
Si dovrebbe pensare più a far bene che a stare bene: e così si finirebbe anche a star meglio. Non preoccuparti solo di essere migliore dei tuoi contemporanei o dei tuoi predecessori.Cerca solo di essere migliore di te stesso |
|
|
|
|
|
#7 |
|
Senior Member
Iscritto dal: Jun 2002
Città:
Provincia De VaRéSe ~ § ~ Lat.: 45° 51' 7" N Long.: 8° 50' 21" E ~§~ Magica Inter ~ § ~ Detto: A Chi Più Amiamo Meno Dire Sappiamo ~ § ~ ~ § ~ Hobby: Divertimento allo Stato Puro ~ § ~ ~ § ~ You Must Go Out ~ § ~
Messaggi: 8897
|
altra cosa che ho visto
(k<=SIZE) questo è sbagliato nei cicli perchè gli array vanno da 0 a n-1 quindi k<SIZE ~§~ Sempre E Solo Lei ~§~
__________________
Meglio essere protagonisti della propria tragedia che spettatori della propria vita
Si dovrebbe pensare più a far bene che a stare bene: e così si finirebbe anche a star meglio. Non preoccuparti solo di essere migliore dei tuoi contemporanei o dei tuoi predecessori.Cerca solo di essere migliore di te stesso |
|
|
|
|
|
#8 |
|
Senior Member
Iscritto dal: Oct 2002
Città: Roma
Messaggi: 1502
|
Ciao Lucas72,
ti riporto due link a dei corsi introdutttivi sul C: http://www.beta.it/beta/ext/corsi/c-intro/index.htm http://alpha.science.unitn.it/~fiore...ac/indexc.html
__________________
Sun Certified Java Programmer EUCIP Core Level Certified European Certification of Informatics Professionals |
|
|
|
|
|
#9 |
|
Senior Member
Iscritto dal: Aug 2002
Messaggi: 3973
|
ops scusate !
mi serve in c++ C'è qualche differenza con quello scritto sopra? Vi ringrazio |
|
|
|
|
|
#10 |
|
Senior Member
Iscritto dal: Apr 2000
Città: Vicino a Montecatini(Pistoia) Moto:Kawasaki Ninja ZX-9R Scudetti: 29
Messaggi: 53971
|
In teoria va bene...ma dipende sempre come fai tu il C++
Usato oggetti e template della libreria standard ? |
|
|
|
|
|
#11 | |
|
Member
Iscritto dal: Jun 2001
Messaggi: 19
|
Quote:
Rileggi la tua frase e capirai che non ha senso, in + è corretto così com'è. |
|
|
|
|
|
|
#12 | |
|
Senior Member
Iscritto dal: Jun 2002
Città:
Provincia De VaRéSe ~ § ~ Lat.: 45° 51' 7" N Long.: 8° 50' 21" E ~§~ Magica Inter ~ § ~ Detto: A Chi Più Amiamo Meno Dire Sappiamo ~ § ~ ~ § ~ Hobby: Divertimento allo Stato Puro ~ § ~ ~ § ~ You Must Go Out ~ § ~
Messaggi: 8897
|
Quote:
---------- 0|come --- 1|ciao ---------- si la mia risposta precente non è corretta ma mi riferivo a questo ~§~ Sempre E Solo Lei ~§~
__________________
Meglio essere protagonisti della propria tragedia che spettatori della propria vita
Si dovrebbe pensare più a far bene che a stare bene: e così si finirebbe anche a star meglio. Non preoccuparti solo di essere migliore dei tuoi contemporanei o dei tuoi predecessori.Cerca solo di essere migliore di te stesso |
|
|
|
|
|
|
#13 | |
|
Member
Iscritto dal: Jun 2001
Messaggi: 19
|
Quote:
Nel mio caso ho definito 2 array identici come segue: nomearray[2][30]; Per come lo visualizzo io mentalmente la prima dimensione definisce il numero massimo di elementi la cui lunghezza massima è 30 (0-29). In questo caso sono 3 (0-2). |
|
|
|
|
|
|
#14 | |
|
Senior Member
Iscritto dal: Jun 2002
Città:
Provincia De VaRéSe ~ § ~ Lat.: 45° 51' 7" N Long.: 8° 50' 21" E ~§~ Magica Inter ~ § ~ Detto: A Chi Più Amiamo Meno Dire Sappiamo ~ § ~ ~ § ~ Hobby: Divertimento allo Stato Puro ~ § ~ ~ § ~ You Must Go Out ~ § ~
Messaggi: 8897
|
Quote:
ma se definisci da 2 come fai ad avere 3??~§~ Sempre E Solo Lei ~§~
__________________
Meglio essere protagonisti della propria tragedia che spettatori della propria vita
Si dovrebbe pensare più a far bene che a stare bene: e così si finirebbe anche a star meglio. Non preoccuparti solo di essere migliore dei tuoi contemporanei o dei tuoi predecessori.Cerca solo di essere migliore di te stesso |
|
|
|
|
|
|
#15 | |
|
Senior Member
Iscritto dal: Jul 2002
Città: Roma
Messaggi: 806
|
Quote:
Codice:
#define SIZE 2 ... char nomi1[SIZE][30]; Codice:
...
for (i=0; i<=SIZE; i++) {
h=i+1;
printf ("Inserire %d° cognome per il primo array: ",h);
fgets (nomi1[i],sizeof(nomi1),stdin);
}
...
Può anche essere che ti funziona (il programma è di poche righe), ma prima o poi andresti ad accedere ad un area di memoria in cui si trovano altri valori, causando una eccezione. Se facessi girare su Unix quel programma, anrà quasi sicuramente in crash! Fidati Pertanto quello che dice Fenomeno85 è vero. Se tu definisci un array di dimensione 2, vuol dire che hai due elementi nell'array. E poiché in C gli indici dell'array partono da 0, gli unici indici validi sarebbero 0 e 1. Quindi accedere all'elemento 2 è una operazione illecita e dannosa. Ciauz |
|
|
|
|
|
|
#16 |
|
Senior Member
Iscritto dal: Aug 2002
Messaggi: 3973
|
prima di passare al conteggio dei cognomi ho provato
con i numeri (sembra più facile) Ho scritto ( assemblato pezzi è il termine più corretto, forse) questo codice in c++ #include <iostream.h> const int DIM1 = 6; const int DIM2 = 7; // prototipi di funzioni void leggiGruppo(int vettore[], int dimensione); void leggiMassimo(const int vettore[], int dimensione, int &max); main() { int gruppo1[DIM1], gruppo2[DIM2]; int max1, max2; //visualizzazione di un messaggio iniziale cout << endl << "Programma che calcola il massimo tra 2 array " << endl << endl; //lettura del primo gruppo cout <<"Inserisci i numeri del primo gruppo: "<<endl; leggiGruppo(gruppo1, DIM1); //lettura secondo gruppo cout << endl<<"Inserisci i numeri del secondo gruppo: "<<endl; leggiGruppo(gruppo2, DIM2); //calcolo il massimo e visualizzazione leggiMassimo(gruppo1, DIM1, max1); cout << endl <<"Il massimo del primo gruppo e': " <<max1<<endl; leggiMassimo(gruppo2, DIM2, max2); cout << endl <<"Il massimo del secondo gruppo e': " <<max2<<endl<<endl; if(max1>max2) { cout<<"il massimo tra i 2 vettori e': " <<max1<<"(nel primo gruppo)"<<endl; } else if(max1<max2) { cout<<"Il massimo tra i due vettori e'"<<max2<<" (nel secondo gruppo)"<<endl; } else if(max1=max2) { cout<<"Il massimo dei numeri dei 2 gruppi e' identico"<<endl; } system("PAUSE"); return 0; } void leggiGruppo(int vettore[], int dimensione) { for (int i = 0;i < dimensione; i++) { cout<<"inserisci numero: "<< i + 1<<" "; cin>>vettore[i]; } } void leggiMassimo(const int vettore[], int dimensione, int &max) { max = 0; int i; for(i=0;i<dimensione;i++) { if(vettore[i]>max) { max= vettore[i]; } } } Il programma, dopo numerosi tentativi ( tra messaggi di errori), adesso funziona. quello che mi interessa ora è il simbolo & delle funzioni, scusatemi sarò di coccio ma vorrei capire bene questo aspetto teoricamente e praticamente. Se lascio nel codice sopra il simbolo &(vicino max per intenderci) il risultato (esatto) in consolle per esempio è: Programma che calcola il massimo tra 2 array Inserisci i numeri del primo gruppo: inserisci numero: 1 1 inserisci numero: 2 2 inserisci numero: 3 3 inserisci numero: 4 4 inserisci numero: 5 5 inserisci numero: 6 6 Inserisci i numeri del secondo gruppo: inserisci numero: 1 1 inserisci numero: 2 2 inserisci numero: 3 3 inserisci numero: 4 4 inserisci numero: 5 5 inserisci numero: 6 6 inserisci numero: 7 7 Il massimo del primo gruppo e': 6 Il massimo del secondo gruppo e': 7 Il massimo tra i due vettori e'7 (nel secondo gruppo) se ometto il simbolo & abbiamo: Programma che calcola il massimo tra 2 array Inserisci i numeri del primo gruppo: inserisci numero: 1 1 inserisci numero: 2 2 inserisci numero: 3 3 inserisci numero: 4 4 inserisci numero: 5 5 inserisci numero: 6 6 Inserisci i numeri del secondo gruppo: inserisci numero: 1 1 inserisci numero: 2 2 inserisci numero: 3 3 inserisci numero: 4 4 inserisci numero: 5 5 inserisci numero: 6 6 inserisci numero: 7 7 Il massimo del primo gruppo e': 2293728 Il massimo del secondo gruppo e': 2293592 il massimo tra i 2 vettori e': 2293728(nel primo gruppo) Premere un tasto per continuare . . . Ecco!! cosa succede in questo caso? Devo capire bene questo punto. Già che ci sono: se non volessi assegnare una dimensione definita per ogni array, ma far in modo che ne contenga massimo 100 di valori ad esempio come potrei fare? Praticamente il codice sopra dovrebbe inglobare la caratteristica di quest'altro semplice codice che ho trovato : //inizializzazioni #include <iostream.h> int main(){ // dichiarazione delle variabili const int TAPPO = 0; int num, max; // stampa del titolo cout << endl; cout << "Calcolo del massimo" << endl << endl; cout << "Inserisci una sequenza di numeri interi positivi " << "terminata da 0" << endl; // Leggi il primo numero cin >> num; cout << endl; max = 0; // finchè (la sequenza non è finita) while(num != TAPPO){ // Se (l'ultimo numero letto è > del massimo tra i // numeri già letti) if (num > max){ // Massimo tra i numeri letti = ultimo numero // letto; max = num; } // Leggi un altro numero cin >> num; } // fine while // Se (è stato letto almeno un numero) if (max != TAPPO){ // Stampa il massimo tra i numeri letti cout << endl << "Il massimo e': " << max << endl << endl; } else{ // Stampa il messaggio "Non sono stati introdotti // numeri" cout << endl << "Non sono stati introdotti numeri" << endl << endl; } system("PAUSE"); return 0; } Ciao e vi ringrazio ancora per la pazienza. |
|
|
|
|
|
#17 |
|
Senior Member
Iscritto dal: Jun 2002
Città:
Provincia De VaRéSe ~ § ~ Lat.: 45° 51' 7" N Long.: 8° 50' 21" E ~§~ Magica Inter ~ § ~ Detto: A Chi Più Amiamo Meno Dire Sappiamo ~ § ~ ~ § ~ Hobby: Divertimento allo Stato Puro ~ § ~ ~ § ~ You Must Go Out ~ § ~
Messaggi: 8897
|
allora il parametro dim è inutile se la dimensione degli array è sempre uguale comunque per renderlo generico va bene, altra cosa, le funzioni le puoi mettere sopra il main così elimini la dichiarazione dei prototipi.
Un accorgimento che farei è quello di ricevere in ritorno dalla funzione i valori massimi. Nella funzione che trova il valore massimo ti consiglio di inizializzare il valore max con il primo valore dell'array. Poi non so a cosa ti serve mettere in pausa. Non ho capito quello che vuoi fare nella seconda parte... ma se vuoi che al massimo leggi 100 persone, la condizione del ciclo la metti < 100 allora siccome utilizzi una variabile che è stata dichiarata in locale alla funzione e non globale, se vuoi modificare il valore contenuto nella variabile devi passare l'indirizzo. Quindi nella dichiarazione dei parametri formali passi la variabile con & mentre nei parametri attuali devi mettere *. Altra cosa che ti dico è che se passi gli array cosa che può succedere, nei parametri formali non devi mettere & perchè il nome dell'array indica già di per se un puntatore, mentre nei parametri attuali l'array lo richiami o con *array oppure array[] Questi sono i cosidetti passaggi di parametri. Ricordati che nella funzione devi utilizzare la variabile come *variabile se non fai errore. ~§~ Sempre E Solo Lei ~§~
__________________
Meglio essere protagonisti della propria tragedia che spettatori della propria vita
Si dovrebbe pensare più a far bene che a stare bene: e così si finirebbe anche a star meglio. Non preoccuparti solo di essere migliore dei tuoi contemporanei o dei tuoi predecessori.Cerca solo di essere migliore di te stesso Ultima modifica di Fenomeno85 : 23-02-2004 alle 19:31. |
|
|
|
|
|
#18 |
|
Senior Member
Iscritto dal: Jun 2002
Città:
Provincia De VaRéSe ~ § ~ Lat.: 45° 51' 7" N Long.: 8° 50' 21" E ~§~ Magica Inter ~ § ~ Detto: A Chi Più Amiamo Meno Dire Sappiamo ~ § ~ ~ § ~ Hobby: Divertimento allo Stato Puro ~ § ~ ~ § ~ You Must Go Out ~ § ~
Messaggi: 8897
|
per correttezza esistono due tipi di passaggi di parametro:
passaggio per valore passaggio per indirizzo Il passaggio per valore significa che passi solo il valore e, i cambiamenti a quellla variabile che vengono fatti non influenzano il valore contenuto nella variabile passata. Al contrario se utilizzi il passaggio per indirizzo i cambiamenti di valore nella funzione influenzano direttamente la variabile passata perchè vai a modificare il valore della cella di memoria della variabile passata. Per come passare spero che hai capito come devi fare comunque: funzione (&variabile_indirizzo, variabile_valore); -> void funzione (tipo *valore, tipo valore); funzione (array); -> void funzione (tipo array[] oppure tipo *array); ricordati che è sbagliato passare così: funzione (&array); ~§~ Sempre E Solo Lei ~§~
__________________
Meglio essere protagonisti della propria tragedia che spettatori della propria vita
Si dovrebbe pensare più a far bene che a stare bene: e così si finirebbe anche a star meglio. Non preoccuparti solo di essere migliore dei tuoi contemporanei o dei tuoi predecessori.Cerca solo di essere migliore di te stesso |
|
|
|
|
| Strumenti | |
|
|
Tutti gli orari sono GMT +1. Ora sono le: 00:19.











ma se definisci da 2 come fai ad avere 3??








