RISOLTO [C] Far acquisire all'utente un vettore

Pubblicità
Stato
Discussione chiusa ad ulteriori risposte.

Drew_

Nuovo Utente
Messaggi
50
Reazioni
3
Punteggio
25
Ciao ragazzi non capisco come far acquisire all utente un vettore (nemmeno per le stringhe ) una sequenza che viene terminata dall inserimento di un particolare valore , ad esempio lo 0
 
Intanto posta quello che sei riuscito a fare o quello che sai fare. Poi ti aiutiamo
 
C:
#define STOP '0'
#include<stdio.h>
#include<stdlib.h>

int main(int argc,char*argv[])
{
  int n,i;
  int *v;
  n=0;
  for(i=0;v!=STOP;i++){
    scanf("%d",&v[I]);
    n++;}
  for(i=0;i<n;i++)
      printf("%d",v[I]);
    return 0;
  }[/I][/I]

#include<stdio.h>
#include<stdlib.h>

int main(int argc,char*argv[])
{
  int *v;
  int dim,i,num;
  for(dim=0,i=0;num!=0;dim++,i++){
    v=(int*)malloc((dim+1)*sizeof(int));
    scanf("%d",&num);
    v[I]=num;
    }
  printf("%d",dim-1);
    return 0;
  }

Adesso mi è uscito questo che mi stampa la dimensione dell array con la sequenza che si ferma con lo 0(non contato), è una cosa giusta?
 
Ultima modifica da un moderatore:
Stai sbagliando. Se devi allocare un array devi allocare memoria prima del for. Ma non ha molto senso il codice in generale...
Per altro anche in caso di riallocazioni dovresti utilizzare realloc.

Dovresti creare una sorta di "array dinamico" per gestire le riallocazioni quando viene raggiunta la dimensione massima, per fare una cosa fatta bene.

In pausa pranzo ti rispondo meglio se dovesse servire.
 
Se mi scriveresti un esempio di come si crea un array dinamico che si ferma quando inserisco lo zero mi faresti un favore enorme (la realloc non ce la fanno usare)
Quando hai tempo e se ti va
Comunque grazie

"Scrivete un programma che legga una sequenza di interi e la stampi al contrario, allocando la memoria necessaria in modo dinamico attraverso l’uso della funzione malloc.
L’input è dato da una sequenza di numeri terminata da 0; non potendo prevedere quanti numeri verranno inseriti, il vettore andrà ridimensionato man mano."

Questo è l'esercizio che dovrei fare
 
Ultima modifica da un moderatore:
Se mi scriveresti un esempio di come si crea un array dinamico che si ferma quando inserisco lo zero mi faresti un favore enorme (la realloc non ce la fanno usare)

Inizio con lo scriverti i passi in maniera descrittiva in quanto se ti scrivo il codice non capiresti come funzionano le cose (e l'esercizio è per te/voi).

Dovresti creare una funzione - spero le possiate utilizzare considerando che state utilizzando puntatori - che allochi la memoria e copi gli elementi del vecchio array nel nuovo qualora la dimensione venga raggiunta.
Nello specifico prima di inserire un nuovo elemento dovrai verificare se la capienza massima è stata raggiunta; se la capienza massima è stata raggiunta chiama una funzione che, ricevuti l'array e la dimensione come parametro, alloca il doppio della memoria (se prima erano 10 elementi, farai 10*2).
Fatto ciò, dovrai copiare tramite memcpy i valori dal vecchio array al nuovo (se non puoi usare memcpy, fai un for), poi fai un free sull'array ricevuto come parametro, e restituisci il nuovo array.

Puoi astrarre come preferisci: puoi anche avere una funzione che ricevuti due parametri (array e valore) verifichi il numero degli elementi presenti e richiami la funzione che alloca il doppio della memoria allocata prima.

In una sorta di pseudocodice:
C:
// capacity = 10
int *array = malloc(capacity * sizeof(int));
int n, size = 0;

while(true) {
  // leggi in input il valore, memorizzalo in n    
  if(n == 0)
      break;
  
  if(capacity == size)
  {
    // chiami la funzione che copia l'array; se non puoi usare funzioni, fai un ciclo qui;
    // ricordati che ora capacity però deve essere: capacity = capacity * 2
  }
  
  array[size++] = n;
}

// stampi l'array al contrario

Sono un pò di fretta, ma non dovrei aver commesso errori nell'esposizione.
 
Va bene grazie mille sei stato molto chiaro e molto gentile


Inviato dal mio iPhone utilizzando Toms Hardware Italia Forum
 
Stato
Discussione chiusa ad ulteriori risposte.
Pubblicità
Pubblicità

Discussioni Simili

Indietro
Top