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 - Non capisco dov'è l'errore..
Forum - Pascal - Non capisco dov'è l'errore..

Avatar
tantocibo (Normal User)
Newbie


Messaggi: 14
Iscritto: 05/04/2012

Segnala al moderatore
Postato alle 19:39
Giovedì, 05/04/2012
Il programma in Pascal "incriminato" stabilisce quante componenti positive/negative ha il vettore con il maggior numero di componenti positive/negative. i vettori sono 5, e le componenti per ciascuno sono 30, che variano come valore da -50 a 50.

Il problema è che il programma genera in output come valori di 'pos0' e 'neg0' (parametri variabili delle procedure) sempre 0, impedendo il reale scopo del programma. Dal momento che la procedura 'generavettore' funziona correttamente (genera i valori come previsto, in modo casuale), credo che il problema di questo malfunzionamento sia proprio imputabile ai contatori 'pos0' e 'neg0', o, perlomeno, all'intera procedura 'contacomponenti'.

Mi affido agli esperti ;)
Codice sorgente - presumibilmente Delphi

  1. program  vettore_max_positive_negative;
  2. uses crt;
  3. type vettore=array[1..30] of longint;
  4. var i,a,neg1,neg2,neg3,neg4,neg5,pos1,pos2,pos3,pos4,pos5,maxneg,maxpos:longint;v1,v2,v3,v4,v5:vettore;
  5.  
  6. //generazione vettore
  7.  
  8. procedure generavettore(var v0:vettore);
  9. begin
  10. for i:=1 to 30 do begin
  11.                  a:=random(101);
  12.                  v0[i]:=50-a;
  13.                  end;
  14. end;
  15.  
  16. //conteggio componenti negative e positive per ciascun vettore
  17.  
  18. procedure contacomponenti(var v0:vettore;neg0:longint;pos0:longint);
  19. begin
  20. for i:=1 to 30 do begin
  21.                   if v0[i]<0 then neg0:=neg0+1; //conteggio componenti negative
  22.                   if v0[i]>0 then pos0:=pos0+1; //conteggio componenti positive
  23.                   end;
  24.  
  25. end;
  26.  
  27. //programma
  28.  
  29. begin
  30. randomize;
  31. textcolor(white);
  32. generavettore(v1);
  33. generavettore(v2);
  34. generavettore(v3);
  35. generavettore(v4);
  36. generavettore(v5);
  37. contacomponenti(v1,neg1,pos1);
  38. maxneg:=neg1;
  39. maxpos:=pos1;
  40. contacomponenti(v2,neg2,pos2);
  41. if neg2>maxneg then maxneg:=neg2;
  42. if pos2>maxpos then maxpos:=pos2;
  43. contacomponenti(v3,neg3,pos3);
  44. if neg3>maxneg then maxneg:=neg3;
  45. if pos3>maxpos then maxpos:=pos3;
  46. contacomponenti(v4,neg4,pos4);
  47. if neg4>maxneg then maxneg:=neg4;
  48. if pos4>maxpos then maxpos:=pos4;
  49. contacomponenti(v5,neg5,pos5);
  50. if neg5>maxneg then maxneg:=neg5;
  51. if pos5>maxpos then maxpos:=pos5;
  52.  
  53. //controllo per debug -- temporaneo ! --
  54.  
  55. for i:=1 to 30 do begin
  56. writeln(v1[i]);
  57. writeln(v2[i]);
  58. writeln(v3[i]);
  59. writeln(v4[i]);
  60. writeln(v5[i]);
  61. end;
  62. writeln;writeln;
  63. writeln('vettore con maggior numero di componenti positive ha ',maxpos,' componenti positive');
  64. writeln('vettore con maggior numero di compoennti negative ha ',maxneg,' componenti negative');
  65. writeln('totale componenti negative per ciascuno dei vettori:  ',neg1,' ',neg2,' ',neg3,' ',neg4,' ',neg5);
  66. writeln('totale omponenti positive per ciascuno dei vettori:  ',pos1,' ',pos2,' ',pos3,' ',pos4,' ',pos5);
  67. readkey;
  68. end.
  69.  
  70. // Sono i contatori 'neg0' e 'pos0' della procedura 'contacomponenti' che non "funzionano"!! le componenti generate sono corrette!!!!


Ultima modifica effettuata da tantocibo il 05/04/2012 alle 19:41
PM Quote
Avatar
Goblin (Member)
Expert


Messaggi: 375
Iscritto: 02/02/2011

Segnala al moderatore
Postato alle 22:13
Giovedì, 05/04/2012
personalmente sono un refrattario a questo genere di impostazione per il ritorno delle variabili.. ma ... il problema è che i parametri neg0 e pos0 non hanno ritorno, prova cosi:
procedure contacomponenti(var v0:vettore;Var neg0:longint;Var pos0:longint);

dovrebbe funzionare

G


Ibis redibis non morieris in bello
PM Quote
Avatar
tantocibo (Normal User)
Newbie


Messaggi: 14
Iscritto: 05/04/2012

Segnala al moderatore
Postato alle 23:05
Giovedì, 05/04/2012
Testo quotato

Postato originariamente da Goblin:

personalmente sono un refrattario a questo genere di impostazione per il ritorno delle variabili.. ma ... il problema è che i parametri neg0 e pos0 non hanno ritorno, prova cosi:
procedure contacomponenti(var v0:vettore;Var neg0:longint;Var pos0:longint);

dovrebbe funzionare

G



GRAZIE INFINITE: HO RISOLTO! :):)

PM Quote