Forum - Pascal
- Aiuto Programma Pascal? (array)
()
Newbie
Messaggi:
Iscritto:
|
Ciao a tutti, a scuola mi è stato assegnato un programma in pascal per allenarsi sugli array e sui vari cicli.
Il programma è abbastanza semplice:
- Un array di 15 elementi contiene 15 numeri casuali. Questi numeri devono essere ordinati in ordine crescente e devono essere divisi tra pari e dispari. Infine bisogna mettere la possibilità di effettuare una ricerca all'interno della lista dei numeri ordinati in ordine crescente che restituisce la posizione del numero.
Funziona tutto quasi perfettamente se non fosse che quando cerco un numero e questo è presente nella lista oltre a dirmi "il numero x si trova in posizione y" mi dice anche "il numero x non è presente nella lista.
Ecco il codice (CONTROLLATE SOLAMENTE LA PARTE IN FONDO SULLA POSSIBILITà DI CERCARE UN NUMERO DATO CHE l'ERRORE è Lì)
Codice sorgente - presumibilmente Delphi |
program paridispari; uses crt; const N_el=15; type vettore=array[1..N_el] of integer; var pari:integer; dispari:integer; ar:vettore; arp:vettore; ard:vettore; i,k,sc,num:integer; ind,r,indp,indd,rp,rd, Ind_pari_row, Ind_disp_row, Ind_pari_col, Ind_disp_col, p_col, p_row, d_col, d_row, p,d:integer; begin clrscr; p:=0; d:=0; randomize; Textcolor(white); gotoxy(24,1); Writeln('Numeri generati casualmente'); for ind:=1 to N_el do ar[ind]:=random(100); gotoxy(25,5); Writeln('Numeri in ordine crescente'); gotoxy(10,3); for ind:=1 to N_el do write(ar[ind]:4); for i:=1 to N_el do for k:=(i+1) to N_el do if AR[i] > AR[k] then begin sc:=AR[k]; AR[k]:=AR[i]; AR[i]:=sc; end; Writeln; Writeln; gotoxy(10,7); for i:=1 to N_el do Write(AR[i]:4); Writeln; Writeln; Ind_pari_row:=10; Ind_disp_row:=10; Ind_pari_col:=20; Ind_disp_col:=45; p_col:=29; p_row:=36; d_col:=28; d_row:=37; Textcolor(1); gotoxy(Ind_pari_col-1,Ind_pari_row); Write(' PARI'); gotoxy(Ind_disp_col-2,Ind_disp_row); Write(' DISPARI'); Ind_pari_row:=Ind_pari_row+2; Ind_disp_row:=Ind_disp_row+2; for ind:=1 to N_el do begin if(ar[ind] mod 2)=0 then begin gotoxy(Ind_pari_col,Ind_pari_row); Textcolor(red); write(ar[ind]:3); Ind_pari_row:=Ind_pari_row+2; p:=p+1; end else begin gotoxy(Ind_disp_col,Ind_disp_row); Textcolor(yellow); write(ar[ind]:3); Ind_disp_row:=Ind_disp_row+2; d:=d+1; end; end; textcolor(green); gotoxy(p_col,p_row); write('I numeri pari sono ',p,''); gotoxy(d_col,d_row); write('I numeri dispari sono ',d,''); readln; textcolor(brown); Write('Cerca un numero: '); readln(num); for i:=1 to N_el do if num=AR[i] then Writeln('Il numero si trova in posizione ',i,'') else if num<>AR[i] then writeln('Il numero ',num,' non Š presente nella lista'); Textcolor(43); gotoxy(30,45); Writeln('Operazione conclusa'); readln; end.
|
Ultima modifica effettuata da Phi il 08/03/2012 alle 19:21 |
|
gigisoft (Member)
Guru
Messaggi: 696
Iscritto: 11/10/2008
|
Ciao,
in realta', supponendo che nell'array non ci siano elementi duplicati,
o che comunque basta trovarne una corrispondenza,
una soluzione un po' migliore sarebbe:
Codice sorgente - presumibilmente Delphi |
Ch := 0; { Ch è stata dichiarata integer, e prima del ciclo di ricerca, viene inizializzata a zero} I := 0 While ((Ch = 0) and (I < N_el)) do Begin If Num=AR[I] then Begin Writeln('Il numero si trova in posizione ',I,''); Ch:=1; { nel caso in cui, venga trovata un' occorrenza, comunico la posizione e aggiorno Ch} End; I := I + 1 End; If Ch=0 then writeln('Il numero non e'' nella lista '); { nel caso in cui ch valga ancora 0, allora la ricerca ha avuto esito negativo
|
in modo che appena trova l'elemento si ferma, senza continuare inutilmente la ricerca nel resto dell'array.
Ciao.
Luigi
|
|
Poggi Marco (Member)
Guru
Messaggi: 969
Iscritto: 05/01/2010
|
Ciao!
Per risolvere il problema, utilizza una variabile booleana in cui salvare l' esito della ricerca.
|
|
Poggi Marco (Member)
Guru
Messaggi: 969
Iscritto: 05/01/2010
|
Basta salvare l' esito della ricerca in una variabile, in questi modo:
Codice sorgente - presumibilmente Delphi |
ch:=0; { ch è stata dichiarata integer, e prima del ciclo di ricerca, viene inizializzata a zero} for i:=1 to N_el do if num=AR[i] then begin Writeln('Il numero si trova in posizione ',i,''); ch:=1; { nel caso in cui, venga trovata un' occorrenza, comunico la posizione e aggiorno ch} end; if ch=0 then writeln('Il numero non e'' nella lista '); { nel caso in cui ch valga ancora 0, allora la ricerca ha avuto esito negativo
|
Ultima modifica effettuata da Poggi Marco il 05/03/2012 alle 23:25 |
|
Usa i commenti per chiedere spiegazioni o ringraziare le risposte. |
|
|