| V I S U A L I Z Z A D I S C U S S I O N E |
| Stromgald |
Inserito il - 02/05/2004 : 11:18:20 Ciao , avrei bisogno di un aiuto sono ai primi passi con il linguaggio c e ho una traccia del tipo : Dato un array monodimensionale di interi costruire, a partire dai valori contenuti in questo, un nuovo array in cui ci sono prima tutti i valori pari del primo array e poi tutti quelli dispari.
ora non so come creare i nuovi array ho iniziato il programma cosi #include <stdio.h> main () { int vet[30] , i , j , k , riemp; //immette il numero degli elementi del vettore do { printf ("Quanti elementi del vettore vuoi inserire?\n"); scanf ("%d", &riemp); } while (riemp>30); //letti in input gli elementi del vettore for (i=0; i<riemp; i++) { printf("Dammi el. (%d) del vettore\n", i ); scanf ("%d", &vet[i]); } if (vet[i] %2 ==0) { for (k=i; k<riemp; k++)
dopo l'if non so come poter continuare non mi si trova mai se qualcuno può aiutarmi gli ne sarei grato grazie |
| 7 U L T I M E R I S P O S T E (in alto le più recenti) |
| Antonio |
Inserito il - 02/05/2004 : 23:33:13 Citazione: Messaggio inserito da nicux
scusami Antonio, ti sei risentito per qualcosa che mi sfugge? perchè evidentemente mi sfugge...
no, non preoccuparti .. non mi son risentito su niente era soltanto per chiarezza... |
| nicux |
Inserito il - 02/05/2004 : 22:51:39 scusami Antonio, ti sei risentito per qualcosa che mi sfugge? perchè evidentemente mi sfugge...
|
| Antonio |
Inserito il - 02/05/2004 : 21:27:16 Citazione: Messaggio inserito da nicux
Citazione: Messaggio inserito da Antonio
si, nicux, hai ragione: ho erroneamente dimensionato l'array con una variabile; cmq, nel tuo algoritmo si deve sostituire "MAX_VETT" con "riemp" (la dimensione realmente occupata del vettore).
Ao.
ovviamente ho utlilizzato identificatori fittizi, chiamali pure come vuoi, ma per convenzione con le costanti usa sempre caratteri maiuscoli
..mi spiace, ma non è una questione di "notazione" o "convenzione"... MAX_VETT (o max_vett o MaxVett -non importa-) indica la massima dimensione dell'array; riemp (così lo ha chiamato Stromgald) indica il numero di celle occupate (e quindi il vettore potrebbe avere in memoria celle non utilizzate). E' diverso!
Ao. |
| nicux |
Inserito il - 02/05/2004 : 21:19:49 Citazione: Messaggio inserito da Antonio
si, nicux, hai ragione: ho erroneamente dimensionato l'array con una variabile; cmq, nel tuo algoritmo si deve sostituire "MAX_VETT" con "riemp" (la dimensione realmente occupata del vettore).
Ao.
ovviamente ho utlilizzato identificatori fittizi, chiamali pure come vuoi, ma per convenzione con le costanti usa sempre caratteri maiuscoli
|
| Antonio |
Inserito il - 02/05/2004 : 20:26:33 si, nicux, hai ragione: ho erroneamente dimensionato l'array con una variabile; cmq, nel tuo algoritmo si deve sostituire "MAX_VETT" con "riemp" (la dimensione realmente occupata del vettore).
Ao. |
| nicux |
Inserito il - 02/05/2004 : 20:06:56 l'algoritmo di antonio funziona ma costringe ad una doppia scansione del vettore iniziale, inoltre in C è sintatticamente errato definire la dimensione di un array con una variabile, di solito si utiliccano costanti definendole nell'header, ad esempio:
#define MAX_VETT 30
dato che nella traccia non è richiesta una relazione d'odine sugli elementi ma solo una separazione si può procedere come segue:
int testa=0,
fondo=MAX_VETT;
for(int i=0; i<MAX_VETT; i++)
if(vet1[i]%2)
{
vet2[fondo]=vet1[i];
fondo--;
}
else
{
vet2[testa]=vet1[i];
testa++;
}
|
| Antonio |
Inserito il - 02/05/2004 : 11:48:27 Io lo farei semplicemente così:
/Public/data/Antonio/200452114343_PariDispari.txt
P.S. Ho pensato ad altri algoritmi possibili ad esempio:
- Contare prima quanti numeri pari sono presenti; - poi un'unico ciclo per posizionare i pari a partire da newVett[0] e posizionare i dispari a partire da newVett["numero numeri pari"+1] in poi;
..ma è evidente che non si giungerebbe ad un risparmio di qualche genere.... |