PROGRAMMA C : ricerca sequenziale
salve a tutti, ho ancora bisogno di voi.
Devo scrivere un programma C che effettui una ricerca di un elemento in un array e ne restituisca tutte le posizioni in cui compare!
Ovviamente nn mi funziona
potreste darmi una mano?
mica devo fare un altro ciclo for per j?
spero possiate aiutarmi
ila
Devo scrivere un programma C che effettui una ricerca di un elemento in un array e ne restituisca tutte le posizioni in cui compare!
Ovviamente nn mi funziona
potreste darmi una mano?
#include <stdio.h> #include <conio.h> #define MAX 50 typedef int vettore[MAX]; . . . . . . void cerca(const vettore v, const float elem,vettore posizione, bool &trovato){ printf("\nInserisci l'elemento da ricercare all'interno del vettore : "); scanf("%d", &elem); trovato=false; int j=0; posizione[j]=0; for(register int i=1;i<=v[0];i++){ if(elem==v[i]){ trovato=true; j++; posizione[j] = i; printf("\n l'ememento e' presente e si trova nelle posizioni [%d] ",posizione[j]); } } }
mica devo fare un altro ciclo for per j?
spero possiate aiutarmi
ila
Risposte
codino l'ho scritto prima, in v[0] c'è la dimensione dell'array, per questo il ciclo for inizia da 1 e termina a n(dimensione dell'array)...
...quali sono le istruzioni in +?
ho dovuto riscrivere + volte il ciclo for perchè se non avessi fatto così , sarebbe comparsa a video la frase "l'elemento è presente nelle posizioni..." ogni volta che quest'ultimo era presente nell'array(ad es se l'elemento era presente 3 volte , la frase veniva stampata a video 3 volte
)
potrei risolvere questo problema riducendo ulteriormente le istruzioni?
ancora grazie a tutti
...quali sono le istruzioni in +?

ho dovuto riscrivere + volte il ciclo for perchè se non avessi fatto così , sarebbe comparsa a video la frase "l'elemento è presente nelle posizioni..." ogni volta che quest'ultimo era presente nell'array(ad es se l'elemento era presente 3 volte , la frase veniva stampata a video 3 volte

potrei risolvere questo problema riducendo ulteriormente le istruzioni?
ancora grazie a tutti
codino l'ho scritto prima, in v[0] c'è la dimensione dell'array, per questo il ciclo for inizia da 1 e termina a n(dimensione dell'array)...
...quali sono le istruzioni in +?
ho dovuto riscrivere + volte il ciclo for perchè se non avessi fatto così , sarebbe comparsa a video la frase "l'elemento è presente nelle posizioni..." ogni volta che quest'ultimo era presente nell'array(ad es se l'elemento era presente 3 volte , la frase veniva stampata a video 3 volte
)
potrei risolvere questo problema riducendo ulteriormente le istruzioni?
ancora grazie a tutti[/quote]
sul fatto di v[0]
scusa ma non l'avevo notato. ora ho capito.
istruzioni in piu':
il ciclo for che tu hai scritto cosi':
for(register int i=1;i<=v[0];i++){
if(elem==v){
trovato=true;
j++;
posizione[j] = i;
printf(" %d, ",posizione[j]);
}
secondo me si puo' fare + semplic cosi' (cmq controlla anche il mio codice, non vorrei sbagliare) (cioe' non serve, in questa struttura, memorizzare gli indici buoni in un altro vettore, in quanto il controllo che esiste almeno 1 indice buono lo hai fatto precedentemente :
for(register int i=1;i<=v[0];i++){
if(elem==v){
printf(" %d, ", i );
}
}
...quali sono le istruzioni in +?

ho dovuto riscrivere + volte il ciclo for perchè se non avessi fatto così , sarebbe comparsa a video la frase "l'elemento è presente nelle posizioni..." ogni volta che quest'ultimo era presente nell'array(ad es se l'elemento era presente 3 volte , la frase veniva stampata a video 3 volte

potrei risolvere questo problema riducendo ulteriormente le istruzioni?
ancora grazie a tutti[/quote]
sul fatto di v[0]

istruzioni in piu':
il ciclo for che tu hai scritto cosi':
for(register int i=1;i<=v[0];i++){
if(elem==v){
trovato=true;
j++;
posizione[j] = i;
printf(" %d, ",posizione[j]);
}
secondo me si puo' fare + semplic cosi' (cmq controlla anche il mio codice, non vorrei sbagliare) (cioe' non serve, in questa struttura, memorizzare gli indici buoni in un altro vettore, in quanto il controllo che esiste almeno 1 indice buono lo hai fatto precedentemente :
for(register int i=1;i<=v[0];i++){
if(elem==v){
printf(" %d, ", i );
}
}
Hai ragione, non ho scritto quello che aveo intenzione di fare dopo....mi serviva per il numero dei volte in cui compare l'elemento da cercare
grazie a tutti comunque
posizione[0]=j; printf(")\n\n L'elemento e' presente %d volta/e ",j);
grazie a tutti comunque

ragazzi per non aprire un nuovo topic, scrivo sempre qui...spero possiate aiutarmi:-D
Dovrei eliminare dal vettore i numeri dispari, ma non funziona!!! dove sbaglio??
vi posto il codice...ah..considerate sempre che in v[0] ho inserito la dimensione del vettore
grazie a tutti
Dovrei eliminare dal vettore i numeri dispari, ma non funziona!!! dove sbaglio??
vi posto il codice...ah..considerate sempre che in v[0] ho inserito la dimensione del vettore
void elimina_dispari(vettore v){ printf("\n\nIl vettore senza gli elementi dispari e': ["); for(int i=1; i<=v[0]; i++){ if (v[i]%2!=0){ v[i]=v[i+1]; printf(" %d ",v[i]); } } printf("]"); }
grazie a tutti
devi solo visualizzarli o anche creare un vettore dei soli dispari?
mah...non so, non c'è una traccia specifica...credo vada bene anche solo visualizzare il vettore privato dei numeri dispari
"ilyily87":
if (v[i]%2!=0){ v[i]=v[i+1]; printf(" %d ",v[i]); }
questo codice viene visitato quando v è dispari, e quindi vengono visualizzati i dispari
si, ci avevo pensato, ma anche mettendo il printf fuori dall'if non funziona ugualmente...
...scusami ma non sono molto esperta
...scusami ma non sono molto esperta

no, il problema è la condizione dell'if, devi cambiarla (negarla)
ok funziona...ma
non ho capito perchè devo mettere la condizione che sia pari

devi visualizzare solo gli elementi pari, o no?
No Luca scusami, credevo funzionasse invece visualizza sole gli elementi di posizione pari
ti metto le correzioni in rosso
void elimina_dispari(vettore v){
printf("\n\nIl vettore senza gli elementi dispari e': [");
for(int i=1; i<=v[0]; i++){
if (v%2==0){
printf(" %d ",v);
}
}
printf("]");
}
void elimina_dispari(vettore v){
printf("\n\nIl vettore senza gli elementi dispari e': [");
for(int i=1; i<=v[0]; i++){
if (v%2==0){
printf(" %d ",v);
}
}
printf("]");
}
Prova con questo:
#include <stdio.h> void elimina_dispari(int v[]); int main(void) { int v[] = {2, 2, 1}; elimina_dispari(v); return 0; } void elimina_dispari(int v[]) { int i, j; i = j = 1; while (i <= v[0]) { if (v[i] % 2 == 0) v[j++] = v[i]; i++; } v[0] = j - 1; printf("Il vettore senza gli elementi dispari è:\n"); for (i = 1; i <= v[0]; i++) printf("%d ", v[i]); printf("\n"); }
ah giusto! ora ho capito...io continuavo a scrivere
e se invece volessi creare un vettore con i soli numeri dispari?
if (v[i]%2==0){ v[i]=v[i+1];
e se invece volessi creare un vettore con i soli numeri dispari?
la via più semplice è dichiarare un nuovo vettore e scriverci di volta in volta i numeri dispari incontrati
stan scusa...non avevo ancora letto
ti ringrazio...anche se mi risulta più facile da capire l'algoritmo di luca
ti ringrazio...anche se mi risulta più facile da capire l'algoritmo di luca

"ilyily87":
stan scusa...non avevo ancora letto
Di nulla figurati, guarda però che come avete fatto voi non vengono eliminati i numeri dispari dal vettore, ma stampati soltanto i pari.

la consegna non era molto chiara, pertanto ci siamo limitati a stampare i numeri pari
"luca.barletta":
la consegna non era molto chiara, pertanto ci siamo limitati a stampare i numeri pari
Sì, scusa, non avevo letto tutto il thread. Tenuto conto però che stanno affrontando gli array, mi pare piuttosto banale come consegna.