PDA

Visualizza versione completa : Array: aiuto!!


Downloader
24-02-2004, 17.05.34
A scuola ci hanno fatto fare sto programma, ma io non ci ho capito nulla per quanto riguarda i vettori.
C'è qalche anima buona che mi spiegherebbe come usare i vettori in pratica?

p.s. il programma funziona


/* Testo:Dato un numero intero in ingresso visualizzare mediante l'uso di un vettore la tabellina relativa a quel numero
*/
#include<iostream.h>
#include<conio.h>
#include<stdio.h>
void main()
{
clrscr();
int a,b,c,vettore[10];
cout<<"inserire il numero";
cin>>a;
for(b=1;b<11;b++) {
vettore[b]=b*a; // ma che cavolo è? perchè vettore b, da dove lo pesca?
}
for(c=1;c<11;c++)
{cout<<"i valori sono: "<<vettore[c]<<endl;} //ma che cavolo è? perchè vettore c, da dove lo pesca.
getch();
}

Tnx!

Sharok
24-02-2004, 17.25.37
Nu nu che hai capito?

for(b=1;b<11;b++) {
vettore[b]=b*a;
}

Hai un ciclo dove il vettore[] viene inizializzato con i valori b*a, mi spiego meglio:

-----
Prendi in input a=4 (esempio)
Inizia il ciclo:
b = 1; a = 4
vettore[1] = 1*4
b++

b=2; a=4
vettore[2] = 2*4
b++

e cosi' via fino all'ultimo elemento del vettore.

Alla fine ti troverai con:
vettore[1] = 4
vettore[2] = 8
vettore[3] = 12
etc...
----

Quindi b (e anche c in seguito) sono gli indici del vettore e non il vettore stesso (che è appunto vettore[]).

Uhm...spero di essermi fatto capire :p

Downloader
24-02-2004, 17.36.18
Ti sei spiegato abbastanza, ora se non altro il quandro è piu semplice.

provero a fare qualche programma e ti faro sapere.

Tnx! :)

(Y)

LoryOne
24-02-2004, 19.57.04
Vettori: questi sconosciuti.

Supponi di esserti sposato e di avere 5 figli (con uno stipendio da nababbo, forse...)
I tuoi 5 figli si chiamano:
Downloader che ha 5 anni
Deep73 che ha 4 anni
Gemm@ che ha 3 anni
TyDany che ha 2 anni
LoryOne che ha 1 anno

Se una persona ti chiedesse: Quanti anni ha TyDany ?
Tu cosa gli diresti ?
Cominceresti con Downloader...no ha 5 anni
poi con Deep73...no ha 4 anni
poi con Gemm@...no ha 3 anni
poi con TyDany...Si è lui, TyDany ha 2 anni.

Beh, se tu pensassi ai tuoi figli come ad un insieme indicizzato di persone capiresti i vettori.

Mi spiego meglio:
Figli[Downloader]=5
Figli[Deep73]=4
Figli[Gemm@]=3
Figli[TyDany]=2
Figli[LoryOne]=1

Se al computer chiedessi: Quanti anni ha LoryOne, lui saprebbe dirti immediatamente 1 in quanto non avrebbe bisogno di ricordarsi i primi 4.
Nel tuo programma al posto dei vari nomi hai un indice numerico (n) che identifica univocamente il valore dell'elemento ennesimo.

Poichè il computer (salvo imposizioni da parte del programmatore) comincia a contare da 0 i vari elementi dell'insieme, tu non devi fare altro che associare un valore all'indice dell'insieme:

Figli[0]=5
Figli[1]=4
Figli[2]=3
Figli[3]=2
Figli[4]=1

Come puoi vedere ciò che cambia, oltre al valore effettivo di ogni elemento, è l'indice stesso.
Adesso potresti pensare in questo modo (chiamando n l'indice):

Figli[n]=y, quindi:

Per n che vale 0; fino a n<5 ; incrementa n di 1 unità
{
Figli[n]=5-n 'y ha il valore data da 5-il valore di n
}

In questo modo sarà il computer a cambiare ogni volta il valore di x e ti riparmerà l'onere di dover scrivere per 5 volte il valore di ogni elemento. ;)

Gergio
24-02-2004, 20.33.28
piccola precisazione, sperando sia superflua:

tutti gli elementi del vettore devono essere dello stesso tipo,

cioè nello stesso vettore (consideriamo qllo dell'esempio di LoryOne) non puoi mettere in Figli[0] un valore che indica l'età e in figli[1] un valore che indica, che so, la provenienza.

Ciao
;)

Downloader
24-02-2004, 23.01.43
Originariamente inviato da gergio
piccola precisazione, sperando sia superflua:

tutti gli elementi del vettore devono essere dello stesso tipo,

cioè nello stesso vettore (consideriamo qllo dell'esempio di LoryOne) non puoi mettere in Figli[0] un valore che indica l'età e in figli[1] un valore che indica, che so, la provenienza.

Ciao
;)

Si, questo lo sapevo.

Grazie 1000 a tutti per le preziose informazioni.

:)

Downloader
01-03-2004, 21.59.57
Piccolo problemino con questo programma, che usa un array, e delle char. Il testo è incluso nel commento.


/* Caricare un array di caratteri e verificare quanti elementi deel'array
sono uguali a '.'.
Stampare il numero di uguaglienze.
*/

#include<iostream.h>
#include<conio.h>
#include<stdio.h>

void main()
{
char carattere[10],c,f='.';
int arr=0,i;


for (i=1;i<11;i++)
{

clrscr();

cout<<"Possibilità n° "<<i<<endl;

cout<<"Inserisci il carattere: ";
cin>>c;


if (carattere[c]==f)

arr++;

}
cout<<endl;
cout<<"Il numero delle volte che il carattere '.' Š stato digitato Š: "<<arr;



}


Il problema è che anche se inserisco un carattere punto non viene contato.

LoryOne
02-03-2004, 08.12.45
Il problema è concettuale.
Quando richiedi un carattere, tu imposti il valore di c, non di carattere[].
Tu il valore di carattere[x] non lo immetti mai.

Devi impostare il programma in modo che:
carattere[x]=y.
E' x che deve essere incrementato fino al raggiungimento del limite superiore dell'array (o del vettore che dir si volgia).

Ricorda:

Figli[n]=y, quindi:

Per n che vale 0; fino a n<5 ; incrementa n di 1 unità
{
Figli[n]=5-n 'y ha il valore data da 5-il valore di n
}

Downloader
02-03-2004, 16.13.50
Scusa, il comprendonio un po duretto, ma non ho le idee molto chiare.

Te dici di incrementare il mediante il for la variabile (e fin qui tutto a posto), ma la variabile che dovrei incrementare io è di tipo char.

Non è possibile incrementare un carattere.

Scusa le idee un po confusionarie, ma sti array anche se li sto iniziando a capire, non li ho ancora digeriti.

Grazie per il tuo aiuto. ;)

Dav82
02-03-2004, 16.49.41
Ti rispondo io ;)

Tu hai un array di caratteri, carattere[10] appunto, che è quindi un contenitore con dieci elementi, ognuno dei quali è un carattere. Avrai quindi:

caratettere[0], carattere[1]... carattere[9] (10 posti, quindi da 0 a 9, si parte di default da zero ;))

In questi elementi ci devi piazzare il carattare che leggi: nel ciclo for tu leggi l'ingresso, lo metti nella variabile c e non in uno degli elementi di carattere[]. Per mettere i valori nell'array, devi usare l'indice del ciclo, da mettere nelle parentesi quadre per indicare in quale elemento di carattere[] salvere il valore letto.
In buona sostanza:


for (i=1;i<11;i++)
{

clrscr();

cout<<"Possibilità n° "<<i<<endl;

cout<<"Inserisci il carattere: ";
cin>>c;
//qui salvi il valore immesso nella variabile c

c>>carattere[i]
//assegni a carattere[i] il valore in c

/*quindi potevi anche fare direttamente:
cin>>carattere[i]*/


if (carattere[c]==f)

/*no! l'indice deve essere un intero,
non un carattere, come lo è c!
Per scorrere gli elementi dell'array,
usi sempre la i.
l'istruzione dovrebbe essere:

if (carattere[i] == f)
*/

arr++;

}


Ah... come buona norma di programmazione, ti consiglio di dichiarare le variabili una per riga: lo so che all'inizio può sembrare (anzi lo è sicuramente) molto palloso, ma quando poi scrivi programmi più grossi è tutto tempo risparmiato a cercare variabili qua e là (te lo dico non per niente: sono appena uscito oggi da un progetto con circa 10.000 righe di codice :))

Ciao :)

Downloader
02-03-2004, 17.08.05
Ciao, Dav e grazie dell'aiuto.

Prima di leggere la tua risposta ho riprovato a fare il programma de novo, e pare (tranne qualche intoppino che funzioni).

Che ne dici?


/* Caricare un array di caratteri e verificare quanti elementi deel'array
sono uguali a '.'.
Stampare il numero di uguaglienze.
*/

#include<iostream.h>
#include<conio.h>
#include<stdio.h>

void main()
{
char carattere[10], car, punto='.';
int cont=0;

for (carattere[10]=1; carattere[10]<11; carattere[10]++)

{ clrscr();
cout<<"Possibilità n° "<<carattere[10]<<endl;

cout<<"Inserisci un carattere: "<<endl;
cin>>carattere[car];

if (carattere[car]==punto)
{cout<<"Il carattere è un punto."<<endl;
cont=cont++;
}
}

cout<<"Il carattere '.' è stato digitato: "<<cont <<" volte";

getch();
}



Grazie per le info, molto preziose, ora devo uscire, appena torno provo a rifare il programma con i tuoi consigli e ti faro sapere.

Tnx! ;)

Dav82
02-03-2004, 17.24.47
Originariamente inviato da Downloader
Ciao, Dav e grazie dell'aiuto.

Prima di leggere la tua risposta ho riprovato a fare il programma de novo, e pare (tranne qualche intoppino che funzioni).

Che ne dici?

Mh... qui usi per il conteggio nel ciclo for il 10° elemento dell'array, e quindi non va bene ;)
Ad ogni iterazione del ciclo, tu assegni un valore crescente a carattere[10], quindi al primo ciclo risulta carattere[10]=1, al secondo carattere[10]=2... e così via. Mentre tu in tutti i carattere[X] (con X = 0, 1, 2... , 9) vuoi salvare i caratteri che leggi, e non una variabile che usi per 'ciclare'.
Quindi io usere una variabile intera i al posto di carattere[10] nel ciclo for: quindi anche in "possibilità n°.... ecc ecc" va messa i e non carattere[10].
Cosa strana carattere[car]. car non ha valore, non gniene hai dato nessuno (o meglio, un valore ce l'ha pure, ma non è determinabile a priori ma... lascia stare, è un'altra cosa), e quindi quando metti cin in carattere[car] non sai in quale posto dell'array lo metti... potrebbe essere 2, 6, 9, o magari anche più di 9, cioè fuori dall'array! In un altro linguaggio, come java per esempio, questo errore ti verrebbe segnalato dicendoti che stai usando una variabile (car) senza averle prima dato un valore.

Buon lavoro ;)

LoryOne
02-03-2004, 19.14.48
Credo di aver capito cosa non hai capito Downloader.
Se non mi capisci dimmi che non hai capito così io capisco che non hai capito e forse tra tutti ci capiamo, capito ? :D

Quando definisci un vettore devi sempre specificare di che tipo deve essere, ossia:

char vett[x]; x è ovviamente un intero

In questo modo il computer sa che vett è un vettore di tipo carattere e che contiene x elementi.
Ogni singolo elemento dell'insieme vett sarà un elemento di tipo carattere.
A questo punto il computer sa che deve predisporre una certa quantità di memoria che deve contenere tutti gli x elementi ma non conosce il valore di nessuno di questi.
Per fare accesso ad ogni singolo elemento hai bisogno di un indice numerico (un intero)

Per impostare un valore al primo elemento gli dirai:
vett[1]='a'
Per impostare un valore al secondo elemento gli dirai:
vett[2]='b';

Adesso il computer sa che ha 2 vettori di tipo char che contengono:
vett[1] il carattere 'a' e vett[2] il carattere 'b'

Come puoi vedere, fai accesso agli elementi del vettore sia in scrittura che in lettura utilizzando un valore numerico (intero).

Poichè nel tuo esempio hai definito 10 elementi, basterà definire una varibile numerica intera che verrà incrementata per popolare ogni singolo elemento del vettore.

Ciao.
Ps: il codice non te lo posterò mai :devil:

Downloader
02-03-2004, 20.17.44
CEL'HO FATTA!!!

Finalmente ce so riuscito a far funzionare tutto.

Lory e Dav non so davvero come ringraziarvi.

A buon rendere (magari tra qualche anno quando ne sapro di piu ;))

(Y)

LoryOne
03-03-2004, 08.04.04
Lory e Dav non so davvero come ringraziarvi.


Per quanto mi riguarda con versamento di € 2.000,00 sul c.c. # 007007007 :D

Dav82
03-03-2004, 13.51.05
Originariamente inviato da LoryOne


Per quanto mi riguarda con versamento di € 2.000,00 sul c.c. # 007007007 :D

Ehy socio, ma non avevamo mica aumentato le tariffe? :devil:


@Downloader: se ti serve qualcos'altro, chiedi pure ;)

Downloader
03-03-2004, 15.20.51
OK, grazie ancora.