Programma in C "Ricerca di un dato valore...e posizione

frenky46
Salve ragazzi, vi posto una traccia che non riesco proprio a risolvere, vi posto quello che son riuscito a fare e il problema del mio programma è che non riesco a distinguere le posizioni quando il valore è presente più di una volta.
Qualcuno può darmi un aiuto?

Ricerca di un dato valore in uno array monodimensionale di interi con indicazione della posizione se il valore è presente più volte indicare il numero delle volte e le posizioni

#include
//il programma ricerca un dato valore e indica il numero di volte presente e le rispettive posizioni//
main()
{
int a[5], i ,posizione, volte ,pos[5], cerca;
printf("Inserisci il valore da cercare\n");
scanf("%d",&cerca);
printf("inserire i valori della sequenza\n");
volte=0;
for(i=0; i<5; i++)
{
scanf("%d",&a);
}
for(i=0; i<5; i++)
{
if(cerca==a)
{
volte=volte+1;
posizione=i+1;
}
}
printf("il valore cercato %d è presente %d volta nella posizione",cerca,volte);
for(i=0; i<5; i++)
{
printf("%d ",posizione);
}
}

Risposte
Umby2
Terminato il ciclo di ricerca, dovresti testare la variabile "volta"

Per volta = 0 --> Il carattere non è presente
Per volta = 1 --> Il carattere è presente ( e puoi visualizzare dove si trova il carattere, ovvero la variabile posizione)
Per volta > 1 --> Il carattere è presente piu volte, e quindi visualizzi proprio "volta"

frenky46
si ok su questo ci sono...però il programma mi chiede nel caso sia presente + volte di dirgli la posizione

frenky46
non so se è chiaro :)

Umby2
SI, è vero.

In questo caso, stabilito che VOLTE > 1, potresti rifare di nuovo il ciclo di ricerca, ed ogni qualvolta riesce il carattere lo visualizzi.

Oppure fai un solo ciclo, visualizzi le posizioni man mano che incontri il carattere, e SOLO alla fine sarai in grado il numero di volte che il carattere è presente.

giozh
potresti unificare ricerca e le posizioni in un unico for, cioè (anche se sprechi piu risorse:
ti crei un array di interi vuoto (chiamalo tipo posizioni) della stessa dimensione di quello dell'input, poi fai un for sul tuo array di input: se trovi il carattere che cerchi incrementi la tua variabile volte e in piu nell'array che hai creato (posizioni) metti nella cella i esima (quindi quella corrente, dove hai appena trovato il carattere che cerchi, un 1. quindi una volta che hai scandito tutto l'array, in posizioni avrai un 1 nelle posizioni corrispondenti al carattere cercato. quindi stampi. questo modo è molto macchinoso, mentre un'altro piu immediato e che ti fa risparmiare risorse (non devi allocare un nuovo array) è questo:
sempre un unico for per scandire l'array, appena trovi il carattere che cerchi incrementi volte, e stampi la posizione in cui è il carattere (quindi stampando semplicemente l'indice del for). alla fine del ciclo stampi poi la tua variabile volte.

frenky46
Grazie mille ragazzi ho risolto il programma brillantemente :)

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