PROGRAMMA C : ricerca sequenziale

ilyily87
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?





#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
ilyily87
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

codino75
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]
:oops: 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 );
}

}

ilyily87
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

 posizione[0]=j;
 printf(")\n\n  L'elemento e' presente %d volta/e ",j);


grazie a tutti comunque :wink:

ilyily87
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


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

_luca.barletta
devi solo visualizzarli o anche creare un vettore dei soli dispari?

ilyily87
mah...non so, non c'è una traccia specifica...credo vada bene anche solo visualizzare il vettore privato dei numeri dispari

_luca.barletta
"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

ilyily87
si, ci avevo pensato, ma anche mettendo il printf fuori dall'if non funziona ugualmente...
...scusami ma non sono molto esperta :oops:

_luca.barletta
no, il problema è la condizione dell'if, devi cambiarla (negarla)

ilyily87
ok funziona...ma :oops: non ho capito perchè devo mettere la condizione che sia pari

_luca.barletta
devi visualizzare solo gli elementi pari, o no?

ilyily87
No Luca scusami, credevo funzionasse invece visualizza sole gli elementi di posizione pari

_luca.barletta
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("]");
}

Studente Anonimo
Studente Anonimo
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");

}

ilyily87
ah giusto! ora ho capito...io continuavo a scrivere
if (v[i]%2==0){
v[i]=v[i+1]; 



e se invece volessi creare un vettore con i soli numeri dispari?

_luca.barletta
la via più semplice è dichiarare un nuovo vettore e scriverci di volta in volta i numeri dispari incontrati

ilyily87
stan scusa...non avevo ancora letto

ti ringrazio...anche se mi risulta più facile da capire l'algoritmo di luca :wink:

Studente Anonimo
Studente Anonimo
"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. ;)

_luca.barletta
la consegna non era molto chiara, pertanto ci siamo limitati a stampare i numeri pari

Studente Anonimo
Studente Anonimo
"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.

Rispondi
Per rispondere a questa discussione devi prima effettuare il login.