Questo sito utilizza cookies solo per scopi di autenticazione sul sito e nient'altro. Nessuna informazione personale viene tracciata. Leggi l'informativa sui cookies.
Username: Password: oppure
Pascal - Aiuto Programma Pascal? (array)
Forum - Pascal - Aiuto Programma Pascal? (array)

Avatar
()
Newbie


Messaggi:
Iscritto:

Segnala al moderatore
Postato alle 1:00
Giovedì, 01/01/1970
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

  1. program paridispari;
  2. uses crt;
  3. const
  4. N_el=15;
  5. type
  6. vettore=array[1..N_el] of integer;
  7. var
  8. pari:integer;
  9. dispari:integer;
  10. ar:vettore;
  11. arp:vettore;
  12. ard:vettore;
  13. i,k,sc,num:integer;
  14. ind,r,indp,indd,rp,rd,
  15. Ind_pari_row,
  16. Ind_disp_row,
  17. Ind_pari_col,
  18. Ind_disp_col,
  19. p_col,
  20. p_row,
  21. d_col,
  22. d_row,
  23. p,d:integer;
  24.  
  25. begin
  26. clrscr;
  27. p:=0;
  28. d:=0;
  29. randomize;
  30. Textcolor(white);
  31. gotoxy(24,1);
  32. Writeln('Numeri generati casualmente');
  33. for ind:=1 to N_el do
  34. ar[ind]:=random(100);
  35. gotoxy(25,5);
  36. Writeln('Numeri in ordine crescente');
  37.  
  38. gotoxy(10,3);
  39. for ind:=1 to N_el do
  40.  
  41. write(ar[ind]:4);
  42. for i:=1 to N_el do
  43. for k:=(i+1) to N_el do
  44. if AR[i] > AR[k] then
  45. begin
  46. sc:=AR[k];
  47. AR[k]:=AR[i];
  48. AR[i]:=sc;
  49. end;
  50.  
  51. Writeln;
  52. Writeln;
  53. gotoxy(10,7);
  54. for i:=1 to N_el do
  55. Write(AR[i]:4);
  56. Writeln;
  57. Writeln;
  58.  
  59. Ind_pari_row:=10;
  60. Ind_disp_row:=10;
  61. Ind_pari_col:=20;
  62. Ind_disp_col:=45;
  63. p_col:=29;
  64. p_row:=36;
  65. d_col:=28;
  66. d_row:=37;
  67.  
  68. Textcolor(1);
  69. gotoxy(Ind_pari_col-1,Ind_pari_row);
  70. Write(' PARI');
  71.  
  72. gotoxy(Ind_disp_col-2,Ind_disp_row);
  73. Write(' DISPARI');
  74.  
  75. Ind_pari_row:=Ind_pari_row+2;
  76. Ind_disp_row:=Ind_disp_row+2;
  77.  
  78.  
  79. for ind:=1 to N_el do
  80. begin
  81. if(ar[ind] mod 2)=0 then
  82. begin
  83. gotoxy(Ind_pari_col,Ind_pari_row);
  84. Textcolor(red);
  85. write(ar[ind]:3);
  86. Ind_pari_row:=Ind_pari_row+2;
  87. p:=p+1;
  88. end
  89. else
  90. begin
  91. gotoxy(Ind_disp_col,Ind_disp_row);
  92. Textcolor(yellow);
  93. write(ar[ind]:3);
  94. Ind_disp_row:=Ind_disp_row+2;
  95. d:=d+1;
  96. end;
  97.  
  98. end;
  99. textcolor(green);
  100. gotoxy(p_col,p_row);
  101. write('I numeri pari sono ',p,'');
  102. gotoxy(d_col,d_row);
  103. write('I numeri dispari sono ',d,'');
  104. readln;
  105.  
  106.  
  107. textcolor(brown);
  108. Write('Cerca un numero: ');
  109. readln(num);
  110.  
  111.  
  112.  
  113. for i:=1 to N_el do
  114. if num=AR[i] then
  115. Writeln('Il numero si trova in posizione ',i,'')
  116. else if num<>AR[i] then
  117. writeln('Il numero ',num,' non Š presente nella lista');
  118.  
  119.  
  120.  
  121. Textcolor(43);
  122. gotoxy(30,45);
  123. Writeln('Operazione conclusa');
  124. readln;
  125. end.


Ultima modifica effettuata da Phi il 08/03/2012 alle 19:21
PM
Avatar
gigisoft (Member)
Guru


Messaggi: 696
Iscritto: 11/10/2008

Up
1
Down
V
Segnala al moderatore
Postato alle 12:33
Martedì, 06/03/2012
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

  1. Ch := 0; { Ch è stata dichiarata integer, e
  2.               prima del ciclo di ricerca, viene inizializzata a zero}
  3. I  := 0
  4. While ((Ch = 0) and (I < N_el)) do
  5. Begin
  6.   If Num=AR[I] then
  7.   Begin
  8.     Writeln('Il numero si trova in posizione ',I,'');
  9.     Ch:=1; { nel caso in cui, venga trovata un' occorrenza, comunico
  10.                la posizione e aggiorno Ch}
  11.   End;
  12.   I := I + 1
  13. End;
  14. If Ch=0 then writeln('Il numero non e'' nella lista ');
  15. { 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. :k:

Luigi


Per essere perfetto potresti cercare di implementare una ricerca binaria, ma così va già bene - Phi - 08/03/12 19:35
PM
Avatar
Poggi Marco (Member)
Guru


Messaggi: 969
Iscritto: 05/01/2010

Up
0
Down
V
Segnala al moderatore
Postato alle 22:56
Lunedì, 05/03/2012
Ciao!

Per risolvere il problema, utilizza una variabile booleana in cui salvare l' esito della ricerca.

PM
Avatar
Poggi Marco (Member)
Guru


Messaggi: 969
Iscritto: 05/01/2010

Up
0
Down
V
Segnala al moderatore
Postato alle 23:14
Lunedì, 05/03/2012
Basta salvare l' esito della ricerca in una variabile, in questi modo:
Codice sorgente - presumibilmente Delphi

  1. ch:=0; { ch è stata dichiarata integer, e
  2.               prima del ciclo di ricerca, viene inizializzata a zero}
  3. for i:=1 to N_el do
  4. if num=AR[i] then
  5. begin
  6.   Writeln('Il numero si trova in posizione ',i,'');
  7.   ch:=1; { nel caso in cui, venga trovata un' occorrenza, comunico
  8.                la posizione e aggiorno ch}
  9. end;
  10. if ch=0 then writeln('Il numero non e'' nella lista ');
  11. { 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
PM
Usa i commenti per chiedere spiegazioni o ringraziare le risposte.