Oppure

Loading
17/08/10 12:50
Poggi Marco
Ho letto il tuo programma.
Il difetto sta nel ciclo del sorteggio: ad ogni iterazioneestrai 2 giocatori.
Inoltre la condizione d' uscita del ciclo interno, è errata.

Dovresti fare in questo modo;
program casuale;
uses crt;
const n=30;
type VStr=array[1..n]of string;
     Mstr=array[1..n,1..2]of string;
var lung,j:word;
    vs:VStr;
    cal:Mstr;
    fr:text;

procedure OrdinaCasuale(var v:VStr; fine:word);
var i,pos:word;
    temp:string;
begin
 for i:=1 to fine-1 do
 begin
   pos:=i+random(fine-i); // estrae un giocatore
   temp:=v[i]; // scambio dei giocatori
   v[i]:=v[pos];
   v[pos]:=temp;
 end;
end;

procedure campionato(var mv:Mstr; v:VStr; fine:word);
var i,j:word;
begin
  i:=1;
  j:=1;
  while i<fine-1 do
  begin
    mv[j, 1]:=v[i];
    mv[j, 2]:=v[i+1];
    i:=i+2;
    j:=j+1
  end;
end;

begin
assign(fr,'gioca.txt');
reset(fr);
lung:=0;
while not eof(fr) do
begin
   lung:=lung+1;
   readln(fr,vs[lung]);
end;
close(fr);
randomize;
OrdinaCasuale(vs, lung);
Campionato(cal, vs, lung);
for j:=1 to lung do  // stampo il vettore
  writeln(j,'-',vs[j]);
writeln;
for j:=1 to (lung div 2) do // stampo le selezioni:
  writeln(cal[j, 1]:15,' VS ',cal[j, 2]:15);
readln;
end.       


Inoltre, ti suggerisco di utilizzare i file binari.
Ultima modifica effettuata da Poggi Marco 17/08/10 13:28
aaa
17/08/10 13:40
djleo
Va in stack overflow error.

La condizione d'uscita del ciclo interna qual'è quella giusta?


stack overflow risolto
procedure campionato (var mv:Mstr;[b]var[/b] v:VStr; fine: word);
var i,j:word;
begin
 i:=1;
 j:=1;
 while i<[b]fine[/b] do
  begin
   mv[j,1]:=v[i];
   mv[j,2]:=v[i+1];
   i:=i+2;
   j:=j+1;
  end;
end;


Gli errori li ho ripotrtati in grassetto
Ultima modifica effettuata da djleo 17/08/10 14:18
aaa
17/08/10 14:54
Alfonso
@ djleo
scusami, ma proprio mi era sfuggito che si fosse nella sezione Pascal.:(

@ Poggi Marco
perchè se t = n evito di fare lo swap tra i due array t ed n, visto che n, dopo n=n-1, non sarà più considerato.
aaa