Telefonino.net network
 
| HOMEPAGE | INDICE FORUM | REGOLAMENTO | ::. NEI PREFERITI .:: | RSS Forum | RSS News | NEWS web | NEWS software |
| PUBBLICITA' | | ARTICOLI | WIN XP | VISTA | WIN 7 | REGISTRI | SOFTWARE | MANUALI | RECENSIONI | LINUX | HUMOR | HARDWARE | DOWNLOAD | | CERCA nel FORUM » |

Torna indietro   WinTricks Forum > Software > Programmazione

Notices

Rispondi
 
Strumenti discussione
Vecchio 24-02-2004, 17.05.34   #1
Downloader
Gold Member
Top Poster
 
Registrato: 04-09-2002
Loc.: Roma
Messaggi: 4.022
Downloader promette bene
Array: aiuto!!

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

Quota:
/* Testoato 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!
Downloader non è collegato   Rispondi citando
Vecchio 24-02-2004, 17.25.37   #2
Sharok
Hero Member
 
L'avatar di Sharok
 
Registrato: 23-09-2001
Loc.: Napoli Periferia Nord
Messaggi: 988
Sharok promette bene
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
___________________________________


L'unico modo di liberarsi di una tentazione e' abbandonarvisi.
Resisti, e la tua anima si ammalera' del desiderio delle cose che si e'proibite, di passione per cio' che le sue stesse mostruose leggi hanno reso mostruoso e illegale. (Oscar Wilde)
Sharok non è collegato   Rispondi citando
Vecchio 24-02-2004, 17.36.18   #3
Downloader
Gold Member
Top Poster
 
Registrato: 04-09-2002
Loc.: Roma
Messaggi: 4.022
Downloader promette bene
Ti sei spiegato abbastanza, ora se non altro il quandro è piu semplice.

provero a fare qualche programma e ti faro sapere.

Tnx!

(Y)
Downloader non è collegato   Rispondi citando
Vecchio 24-02-2004, 19.57.04   #4
LoryOne
Gold Member
WT Expert
 
Registrato: 09-01-2002
Loc.: None of your business
Messaggi: 5.505
LoryOne è un gioiello raroLoryOne è un gioiello raroLoryOne è un gioiello raro
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.
LoryOne non è collegato   Rispondi citando
Vecchio 24-02-2004, 20.33.28   #5
Gergio
Gold Member
 
Registrato: 14-06-2001
Loc.: LC
Messaggi: 2.415
Gergio promette bene
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
___________________________________

Gergio non è collegato   Rispondi citando
Vecchio 24-02-2004, 23.01.43   #6
Downloader
Gold Member
Top Poster
 
Registrato: 04-09-2002
Loc.: Roma
Messaggi: 4.022
Downloader promette bene
Quota:
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 non è collegato   Rispondi citando
Vecchio 01-03-2004, 21.59.57   #7
Downloader
Gold Member
Top Poster
 
Registrato: 04-09-2002
Loc.: Roma
Messaggi: 4.022
Downloader promette bene
Piccolo problemino con questo programma, che usa un array, e delle char. Il testo è incluso nel commento.

Quota:
/* 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.
Downloader non è collegato   Rispondi citando
Vecchio 02-03-2004, 08.12.45   #8
LoryOne
Gold Member
WT Expert
 
Registrato: 09-01-2002
Loc.: None of your business
Messaggi: 5.505
LoryOne è un gioiello raroLoryOne è un gioiello raroLoryOne è un gioiello raro
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:
Codice:
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
}
LoryOne non è collegato   Rispondi citando
Vecchio 02-03-2004, 16.13.50   #9
Downloader
Gold Member
Top Poster
 
Registrato: 04-09-2002
Loc.: Roma
Messaggi: 4.022
Downloader promette bene
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.
Downloader non è collegato   Rispondi citando
Vecchio 02-03-2004, 16.49.41   #10
Dav82
Gold Member
Top Poster
 
Registrato: 18-07-2002
Messaggi: 6.399
Dav82 promette bene
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:

Codice:
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

Ultima modifica di Dav82 : 02-03-2004 alle ore 16.56.20
Dav82 non è collegato   Rispondi citando
Vecchio 02-03-2004, 17.08.05   #11
Downloader
Gold Member
Top Poster
 
Registrato: 04-09-2002
Loc.: Roma
Messaggi: 4.022
Downloader promette bene
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?

Quota:
/* 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!
Downloader non è collegato   Rispondi citando
Vecchio 02-03-2004, 17.24.47   #12
Dav82
Gold Member
Top Poster
 
Registrato: 18-07-2002
Messaggi: 6.399
Dav82 promette bene
Quota:
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
Dav82 non è collegato   Rispondi citando
Vecchio 02-03-2004, 19.14.48   #13
LoryOne
Gold Member
WT Expert
 
Registrato: 09-01-2002
Loc.: None of your business
Messaggi: 5.505
LoryOne è un gioiello raroLoryOne è un gioiello raroLoryOne è un gioiello raro
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 ?

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
LoryOne non è collegato   Rispondi citando
Vecchio 02-03-2004, 20.17.44   #14
Downloader
Gold Member
Top Poster
 
Registrato: 04-09-2002
Loc.: Roma
Messaggi: 4.022
Downloader promette bene
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)
Downloader non è collegato   Rispondi citando
Vecchio 03-03-2004, 08.04.04   #15
LoryOne
Gold Member
WT Expert
 
Registrato: 09-01-2002
Loc.: None of your business
Messaggi: 5.505
LoryOne è un gioiello raroLoryOne è un gioiello raroLoryOne è un gioiello raro
Quota:
Lory e Dav non so davvero come ringraziarvi.
Per quanto mi riguarda con versamento di € 2.000,00 sul c.c. # 007007007
LoryOne non è collegato   Rispondi citando
Rispondi


Utenti attualmente attivi che stanno leggendo questa discussione: 1 (0 utenti e 1 ospiti)
 
Strumenti discussione

Regole di scrittura
You may not post new threads
You may not post replies
You may not post attachments
You may not edit your posts

BB code is ON
Gli smilies sono ON
[IMG] è ON
Il codice HTML è OFF

Vai al forum

Discussioni simili
Discussione Autore discussione Forum Risposte Ultimo messaggio
Photoshop CS3 - Aiuto per l' "Aiuto" galeno Software applicativo 0 12-04-2008 17.10.49
AIUTO !! TCP ermetici !! AIUTO !! aloamauro Internet e Reti locali 9 22-01-2007 17.07.14
perchè il masterizzatore non copia più? AIUTO haliaeetus Hardware e Overclock 1 10-12-2005 20.44.08
Aiuto con sto dialer che mi sta attenagliando le palle!!!! torakiki78 Sicurezza&Privacy 2 21-04-2005 15.31.25
Aiuto Aiuto xp non funziona.. rarr64 Windows 7/Vista/XP/ 2003 6 27-11-2004 19.06.26

Orario GMT +2. Ora sono le: 17.54.22.


E' vietata la riproduzione, anche solo in parte, di contenuti e grafica.
Copyright © 1999-2017 Edizioni Master S.p.A. p.iva: 02105820787 • Tutti i diritti sono riservati
L'editore NON si assume nessuna responsabilità dei contenuti pubblicati sul forum in quanto redatti direttamente dagli utenti.
Questi ultimi sono responsabili dei contenuti da loro riportati nelle discussioni del forum
Powered by vBulletin - 2010 Copyright © Jelsoft Enterprises Limited.