View Full Version : [C] Stampa vettore invertito
Ho scritto questo programma per stampare un vettore di interi invertito, ad esempio 1,2,3,4 diventa 4,3,2,1 non capisco perchè non va, sembra perfetto
#include <stdio.h>
#define SIZE 10
int main(){
int x=0;
int n=0;
int i=0;
int j=SIZE;
int a[SIZE];
int b[SIZE];
for(i=0;i<SIZE;i++){
printf("Inserisci un elemento:\n");
scanf("%d", &x);
a[i]=x;}
for(i=0;i<SIZE;i++){
b[i]=a[j];
j=j-1;}
for(i=0;i<SIZE;i++){
a[i]=b[i];}
for(i=0;i<SIZE;i++){
printf("%d", a[i]);}
}
ops devo usare solo il vettore a. ora lo rifaccio
ecco qui, l'ho rifatto utilizzando solo il vettore a, sembra perfetto, come sempre ma non funziona, cioè stampa il vettore nel suo ordine naturale
come mai?
#include <stdio.h>
#define SIZE 10
int main(){
int x=0;
int i=0;
int a[SIZE];
int j=0;
int temp=0;
for(i=0;i<SIZE;i++){
printf("Inserisci un elemento:\n");
scanf("%d", &x);
a[i]=x;}
for(i=SIZE;i=0;i--){
temp=a[i];
a[i]=a[j];
a[j]=temp;
j++;}
for(i=0;i<SIZE;i++){
printf("%d", a[i]);
}
}
sottovento
30-07-2007, 09:31
L'elemento in posizione SIZE non esiste. L'ultimo del vettore ha posizione SIZE-1.
Nell'istruzione
for(i=SIZE;i=0;i--)
ci sono quindi due errori:
- devi inizializzare a i=SIZE-1;
- la condizione di permanenza nel ciclo deve essere i >= 0 (e non i=0 il quale e' un assegnamento di 0 ad i e che fara' terminare il ciclo senza nemmeno entrarci)
ho corretto ma non funge lo stesso
#include <stdio.h>
#define SIZE 10
int main(){
int x=0;
int i=0;
int a[SIZE];
int j=0;
int temp=0;
for(i=0;i<SIZE;i++){
printf("Inserisci un elemento:\n");
scanf("%d", &x);
a[i]=x;}
for(i=SIZE-1;i>=0;i--){
temp=a[i];
a[i]=a[j];
a[j]=temp;
j++;}
for(i=0;i<SIZE;i++){
printf("%d", a[i]);
}
while(getchar() != '\n');
printf("Premere INVIO per continuare...");
getchar();
}
sottovento
30-07-2007, 10:17
Si, mi era scappata. Siccome fai il ciclo da 9 a zero, giri gli elementi due volte, tornando quindi alla situazione originale.
Ti basta girarli una volta sola:
for(i=SIZE-1;i>=(SIZE/2);i--)
labrosan
30-07-2007, 11:08
Ciao,
non hai bisogno di invertire il vettore a. Ti viene chiesto solo di stamparlo al rovescio...
Basta fare un ciclo partendo dall'ultimo valore inserito.
Es.
#include <stdio.h>
#define SIZE 10
int main(){
int i=0;
int a[SIZE];
for(i=0;i<SIZE;i++){
printf("Inserisci un elemento:\n");
scanf("%d", &a[i]);
}
for(i=SIZE-1;i>=0;i--)
printf("%2d", a[i]);
while(getchar() != '\n');
printf("\n\nPremere INVIO per continuare...");
getchar();
}
Così risparmi anche un pò di variabili.
Ciao Ciao
hai ragione. non c'avevo pensato.
e comq avrei fatto lo stesso come ho fatto io, per esercitarmi a fare cose un po piu "complicate". che poi complicate non sono...
vBulletin® v3.6.4, Copyright ©2000-2025, Jelsoft Enterprises Ltd.