PDA

View Full Version : [C++] Modificare elementi di un Array


IngMetallo
12-08-2011, 19:51
Ragazzi oggi mi sono imbattuto in un problema veramente stupido, suppongo.. ma non riesco a venire a capo.

In un programma che sto facendo ho bisogno di poter modificare un array bidimensionale 2x2 che viene inizializzato con tutti gli elementi a zero.
Eseguendo il codice che vi riporto più sotto, mi sono accorto che l'array veniva sballato dopo la modifica.. così ho aggiunto altre righe di codice per vedere dove fosse il problema.. in pratica dopo avere preso in input x e y non so perché ma il valore della y sballa e l'array di conseguenza non viene modificato correttamente o.o

Dov'è che sbaglio ? non riesco proprio a capire.. :rolleyes:


#include<iostream>
using namespace std ;

int main ()
{
int x, y, nuovo ;
int v[2][2] ;

for (int i=0; i<3; i++) // inizializzazione array
{
for (int j=0; j<3; j++)
{
v[i][j] = 0 ;
}
}

for (int i=0; i<3; i++) // stampa di verifica array
{
for (int j=0; j<3; j++)
{
cout.width(3);
cout << v[i][j] ;
}
cout << endl ;
}

cout << " insersci la posizione dove vuoi inserire un nuovo elemento : " ;
cout << " inserisci x = " ;
cin >> x ;
cout << " inserisci y = " ;
cin >> y ;

cout << " che numero vuoi inserire ? " ;
cin >> nuovo ;

cout << endl ;
v[x][y] = nuovo ;
cout << nuovo << " e stato inserito nella posizione " << x << " ," << y ; // verifica che i valori x e y siano corretti.. qui è dove trovo l'errore

for (int i=0; i<3; i++) //stampa array modificato
{
for (int j=0; j<3; j++)
{
cout.width(3) ;
cout << v[i][j] ;
}
cout << endl ;
}


system ("PAUSE") ;
return 0 ;
}


p.s: studio programmazione da 3 mesi, siate clementi :D

clockover
12-08-2011, 21:04
Perchè inizializzi con 2 elementi e invece nei cicli scrivi 3?

Negli array
array[0] --> elemento numero uno
array[1] --> elemento numero due
e così via

Nei cicli
for(int i = 0; i < 2; i++){....}
scrivi correttamente, mentre con
for(int i = 0; i < 3; i++){....}
sfori


ti consiglio per non fare errori di questo tipo di definirti una macro
#define SIZE 2

quindi nel codice
int array[SIZE]......
for(int i = 0; i < SIZE; i++){...}
invece di scrivere ogni volta il numero basta che scrivi la macro associata, poi ci penserà il preprocessore a sostituirla con il numero

Perseverance
12-08-2011, 21:20
Ricordati che in informatica si parte a contare da ZERO 0. Il tuo v è:
v[0][0]
v[0][1]
v[1][0]
v[1][1]

IngMetallo
12-08-2011, 21:25
EDIT: ah credo di aver capito.. un attimo che verifico xD

Sì come immaginavo era un errore stupido.. sbagliavo all'inizio inizializzando v[2][2] l'array mi serviva di 3 righe x 3 colonne e non so perché io credevo che inizializzando v[2][2] avrei avuto 3 colonne e 3 righe.. bah xD

comunque grazie per i suggerimenti e le risposte veloci :)

supersalam
12-08-2011, 23:01
EDIT: ah credo di aver capito.. un attimo che verifico xD

Sì come immaginavo era un errore stupido.. sbagliavo all'inizio inizializzando v[2][2] l'array mi serviva di 3 righe x 3 colonne e non so perché io credevo che inizializzando v[2][2] avrei avuto 3 colonne e 3 righe.. bah xD

comunque grazie per i suggerimenti e le risposte veloci :)

L'array è inizializzato bene, hai sbagliato la condizione di chiusura dei cicli for. Prova a mettere 2 al posto di 3.

IngMetallo
12-08-2011, 23:29
L'array è inizializzato bene, hai sbagliato la condizione di chiusura dei cicli for. Prova a mettere 2 al posto di 3.

ma no :p l'errore mio stava nell'inizializzazione dell'array.. infatti modificato quello poi ho risolto per il resto del programma :) comunque anche nel primo post ho sbagliato a scrivere.. ero convinto che dichiarando un array [2][2] si intendesse a 3 colonne e 3 righe, invece non era affato così..

I cicli for ripetevano il blocco di istruzioni al loro interno 3 volte e quindi andava bene. Il problema era che l'array bidimensionale aveva solo 4 "elementi" (2x2) al posto dei 9 (3x3)che mi servivano.. E' che ricordavo male come si inizializzassero gli array.. e io che stavo pensando a tutt'altro..

Era veramente banale e infatti è stata l'unica cosa che non ho ricontrollato del programma.. la prossima volta farò attenzione anche alle cose più banali :muro: