[c] Modificare un vettore

Pubblicità

jolly

Utente Attivo
Messaggi
110
Reazioni
4
Punteggio
38
Buona giornata a tutti,ho appena concluso il capitolo dei vettori e ora iniziano gli esercizi ed i primi problemi xd.
Pensavo che l'esercizio che fra poco posto fosse abbastanza semplice,ma invece già ho incontrato dei problemi,devo ancora prendere confidenza con i vettori.

In pratica l'utente deve inserire 5 interi e salvarli in un vettore,dopodichè stampare il vettore. E fin qui ci siamo.
Poi dice di modificare il vettore,e stampare i valori separati da uno spazio.
Es. input: 15973 ----> 1 5 9 7 3

Ho provato a scrivere qualcosa ecco:
Codice:
#include <stdio.h>
#define SIZE 5
void main ()
{
	int a[SIZE];
	int i;

	printf( "Inserisci 5 interi: " );
	scanf( "%d" , &a[SIZE] );
	
	/* visualizza il vettore originale */
	printf( "%d\n", a[SIZE]);
	
	/* Problema...vorrei che ogni numero venisse visualizzato con uno spazio */
        for(i=0;i<SIZE;i++) {
		 printf( "%d " , a[SIZE] ); /* in questo caso mi visualizza 0 1 2 3 4,mentre dovrebbe visualizzare il numero in input,ho provato anche con a[i] ma non va. */
	}

}
 
Allora, facciamo un po' di ordine:
Codice:
#include <stdio.h>


#define SIZE 5


int main() {


    int array[SIZE];
    int i;
    
    for(i = 0; i < SIZE; i++) {
        printf( "Inserisci un intero: " );
        scanf( "%d", &array[i] );
    }
    printf("\n");
    for(i = 0; i < SIZE; i++) {
        printf("[%d] ", aarray[i]);
        
    }
    printf("\n");
    
    return 0;


}

P.S. ho riempito l' array col for visto che ormai sono abituato allo standard ANSI, ma non sono sicuro che si possa fare come hai fatto tu.

Invece di passare l' indirizzo dell' intero vettore, secondo me è più intuitivo scorrere ogni elemento dell' array e stamparlo
 
ho provato a fare in questo modo e funziona:
Codice:
#include <stdio.h>
#define SIZE 5

void main()
{
	int vett[SIZE];
	int i;

  
 
  	for(i=0;i<SIZE;i++) {
     		printf("Inserisci l'elemento n. %d del vettore : ",i+1);
     		scanf("%d",&vett[i]);
  	 }

  	/* VISUALIZZAZIONE VETT. ORIGINALE */
  	
	printf("\n\nIl vettore originale e' : ");
  	for(i=0;i<SIZE;i++) {
    		printf("%d",vett[i]);
	}

  	/* VISUALIZZAZIONE VETTORE MODIFICATO */
  	
	printf("\nVETTORE MODIFICATO  : ");
  	for(i=0;i<SIZE;i++) {
    		printf(" %d",vett[i]);
	}
	
	printf("\n");
}
Quindi bisogna per forza riempire l'array con un valore per volta tramite ciclo for,non cè qualche metodo che mi permette di salvare tutte e 5 interi contemporaneamente?
 
Ultima modifica:
In C sto controllando ma credo proprio che non sia possibile: un array a[DIM] alla fine ha un suo indirizzo di memoria, ma lo stesso di può dire dei suoi elementi che lo compongono, e il compilatore C non è in grado di gestire un indirizzamento automatico ad ogni singola variabile di un array a meno che non sia l' utente a specificarlo (es. &a[5] = indirizzo dell' elemento alla cella 6 dell' array)
So che in java è possibile quindi a rigor di logica anche in C++ (entrambi linguaggi ad oggetti) e poichè gcc è nato come compilatore linux anche per C++ te lo lascia fare... per pura curiosità in compilazione fai gcc -ANSI -Wall programma.c e vedi se ti da errore (con la prima versione ovviamente)
 
Eppure la cosa che non capisco è che se al posto degli interi volessi modificare una stringa sempre lasciando uno spazio fra i caratteri,come in questo caso:
Codice:
#include <stdio.h>
#define SIZE 10

void main() 
{

	char array[SIZE];
	int i;
    
	printf( "Inserisci una parola: " );
	scanf( "%s",array);

	/* visualizza l'array originale */
	printf( "La parola è: %s\n" , array);
	
	/* visualizza l'array modificato */
	for (i=0;array[i] != '\0';i++) {
		printf( "%c " , array[i]);
	}
	
}
Cioè un'array di tipo char funziona perfettamente,cioè salva automaticamente tutta la parola nell'array,mentre di tipo int bisogna salvare un valore per volta.

So che in java è possibile quindi a rigor di logica anche in C++ (entrambi linguaggi ad oggetti)
Non so di preciso le caratteristiche e i vantaggi dei linguaggi ad oggetto,quindi possiamo dire che il fatto che non si può salvare automaticamente tutto il valore di un intero in un array,sia un proprio un limite del linguaggio c essendo un linguaggio non orientato ad oggetti...oppure ho detto una cavolata?

per pura curiosità in compilazione fai gcc -ANSI -Wall programma.c e vedi se ti da errore (con la prima versione ovviamente)
Nel momento della compilazione mi restituisce queto errore: <command-line>:0:1: error: missing '(' after predicate
 
Scusa, -ansi va scritto minuscolo!
Per il discorso dei vettori di char (che alla fine sono STRINGHE) è diverso, visto che (forse senza saperlo) usi dei puntatori, ovvero delle variabili che puntano ad una determinata posizione di memoria...

Comunque in effetti si può riempire un array senza for (purchè tu conosca la dimensione), ma secondo me fa abbastanza schifo:
int array[5];
printf("Dammi 5 interi: ");
scanf("%d%d%d%d%d", &array[0], &array[1], &array[2], &array[3], &array[4]);

Infine, diciamo che il C è stato pensato per altro, i linguaggi ad oggetti sono nati dalla necessità di avere un linguaggio "prefatto" dove tu puoi richiamare qualsiasi oggetto creato nel tuo programma (scusa la definizione vaga, era per farti capire)
 
Pubblicità
Pubblicità
Indietro
Top