błąd podczas kompilacji w TMTP

0

witam.
Pojawił mi sie błąd podczas kompilowania programu
ms dos 32 bit protected mode.
Co to za błąd..?

Kompiluje w Tmt Pascalu

uses crt;
var tab:array[1..20] of integer;
    i,licznik:byte;

begin
   randomize;
     repeat
     i:= random(10);
     writeln(tab[i]);
     inc(licznik);
     until licznik=10;
     readln;
end.
0

To nie jest żaden błąd. Program "działa": http://ideone.com/5EBYf

0

To, co Ci wyskakuje to nie jest błąd kompilacji, program powinien działać bez większych problemów; Mniejszym problemem jest losowanie liczb, w którym może wystąpić błąd; Zwróć uwagę na deklaracje macierzy:

var tab:array[1..20] of integer;

a losowanie indeksu elementu w macierzy:

i:= random(10);

Zadeklarowana macierz przechowuje elementy indeksowane w przedziale 1 .. 20, a Ty losujesz z przedziału 0 .. 9; Nie dość, że jak generator wylosuje 0 to wyjdziesz poza zakres macierzy, to jeszcze nigdy nie wyświetlisz wartości elementów z przedziału 10 .. 20; Nie wiem, czy takie jest założenie programu, czy nie, więc nie będę Cię poprawiał; W każdym razie aby można było wylosować indeks każdego elementu z macierzy, powinieneś to zrobić w ten sposób:

var
  Tab: array [0 .. 19] of Integer;

{...}

I := Random(20);

i będzie wszystko działać;

Kolejnym problemem jest brak inicjacji zmiennej licznik - przed pętlą przypisz jej wartość początkową, np. 0 (powinieneś dostać ostrzeżenie o tym);

Czyli Twój program mógłby wyglądać tak:

uses
  Crt;
var
  Tab: array [0 .. 19] of Integer;
  I, Licznik: Byte;
begin
  Randomize;
  Licznik := 0;

  repeat
    I := Random(20);
    WriteLn(Tab[I]);

    Inc(Licznik);
  until Licznik = 10;

  ReadLn;
end.

dzięki temu żadnego błędu nie uświadczysz; Popracuj nad formatowaniem kodu - styl wielbłądzi się kłania;

0

Po poprawieni błędów i bezsensowności powinno być tak:

const Tab:array [0 .. 19] of Integer = (1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20);
var  I:Byte;
begin
  Randomize;
  for I:=0 to 10 do WriteLn(Tab[Random(20)]);
  ReadLn;
end.
0

Dobra ale nie chodziło mi o to by mi tu poprawiać kod..? Tylko powiedzcie co mam zrobić, żeby ta informacja sie nie pojawiała.. Bo jak naciskam kompilacje to wyskakuje to coś.. :D i program sie nie włącza..

0

ProProgramer, czy na moją wersję twój kompilator reaguje tak samo?

0

Mam jeszcze pytanko.. Dlaczego losują mi się same zera? skoro mam uruchomiony generator liczb losowych..?

0
ProProgramer napisał(a)

Dlaczego losują mi się same zera?

Twój stary kod wrzucony przez @Endrju na ideone na wyjściu dawał same zera; Nie zagłębiałem się w tamten kod, ale ten podany przez @_13th_Dragon działa w pełni pod Borland Delphi 7; Na FPC także powinien działać, więc zmień kompilator na jakiś sensowny i przetestuj;


Nie rozumiem dlaczego Ci nie działa... Jedyny bląd jaki mi wyszedł to Runtime Error 105 w BD7, ale nie dodałem klauzuli {$APPTYPE CONSOLE}; Poza tym sprawdziłem i działa w pełni; Oczywiście liczby często się powtarzają, ale nie ma przecież zaimplementowanego zabezpieczenia przed tym; Tak więc kod @_13th_Dragon działa jak należy; Z ciekawości przetestowałem archaiczny kompilator TP7 i także działa bez problemów; Oto działający kod:

program Los;
uses
  Crt;
const
  aNum: array [0 .. 19] of Byte = (1,  2,  3,  4,  5,
                                   6,  7,  8,  9,  10,
                                   11, 12, 13, 14, 15,
                                   16, 17, 18, 19, 20);
var
  I: Byte;
begin
  ClrScr;
  Randomize;

  for I := 0 to 9 do
    WriteLn('Los nr ', I, ': ', aNum[Random(20)]);

  ReadLn;
end.

Przykładowe wyjście:

Los nr 0: 13
Los nr 1: 4
Los nr 2: 15
Los nr 3: 2
Los nr 4: 5
Los nr 5: 18
Los nr 6: 2
Los nr 7: 14
Los nr 8: 17
Los nr 9: 3

U mnie wszystko gra, założe się, że pod FPC także wszystko będzie śmigać; Nie mam jednak zielonego pojęcia dlaczego u Ciebie są wciąż problemy...

0
uses crt;
var i:byte;
    tab:array[1..19] of byte;


procedure losuj();
var licznik:byte;
begin
ClrScr;
     i:=random(20);
     for licznik:=0 to 9 do
     writeln(tab[i]);

end;


begin

losuj();
readln;

end.

Co tu jeszcze jest źle, że mi dalej same zera losuje ?

0
ProProgramer napisał(a)

Co tu jeszcze jest źle, że mi dalej same zera losuje ?

Wskaż mi w kodzie linijkę, w której wypełniasz tablicę danymi; Poza tym co Ty robisz?

     i:=random(20);
     for licznik:=0 to 9 do
     writeln(tab[i]);

Do czego to ma być? Raz losujesz liczbę a później 10 razy wypisujesz element z macierzy o wylosowanym indeksie... Choćbyś wypełnił tablicę jakimiś danymi to i tak powyższa pętla wypisze 10 razy tą samą liczbę... Inna sprawa to to, że nie uruchomiłeś generatora liczb pseudolosowych procedurą Randomize;

1 użytkowników online, w tym zalogowanych: 0, gości: 1