Zadanie z matury - jak naprawić błąd 106?

2016-05-16 17:00
0

Jestem dość zielona w temacie, no ale dobrze. Zadanie z matury 2015, 4.2, w którym należy sprawdzić, które liczby z pliku są podzielne przez 2 a które przez 8. Plik kompiluje się bez błędów, ale po uruchomieniu wyskakuje błąd 106 i nie jestem w stanie zidentyfikować źródła problemu.

program bin2dec;

uses
  crt;

var
  f, t : Text;
  s, b, c : LongInt;

  function bintodec(b, k : LongInt) : LongInt;
  begin
    if b = 0 then
      bintodec := 0
    else
      bintodec := bintodec(b div 10, k * 2) + b mod 10 * k;
  end;

begin
  clrscr;
  Assign(f, '..\pliki\liczby.txt');
  reset(f);
  Assign(t, '..\pliki\wyniki.txt');
  rewrite(t);
  while not EOF(f) do
  begin
    readln(f, s);
    b := s;
    b := bintodec(b, 1);
    Write(t, s);
    if (b mod 2) = 0 then
      Write(t, ' (*)');
    if (b mod 8) = 0 then
      Write(t, ' (**)');
    writeln(t);
  end;
  Close(f);
  Close(t);
  repeat
  until keypressed;
end.

Bardzo proszę o pomoc, mój nauczyciel nie potrafił też znaleźć źródła problemu...

edytowany 3x, ostatnio: furious programming, 2016-05-16 17:50
Nie uważam się za eksperta, ale trochę przerażające jest to, że nauczyciel tego nie ogarnął ;) - karpov 2016-05-16 22:56

Pozostało 580 znaków

2016-05-16 17:05
0

Niełatwo jest znaleźć sprawnie źródło jakiegokolwiek problemu w nawet krótkim kodzie, jeżeli nie jest on wcale sformstowany. Także proponuje sformatować swój kod porządnie i wkleić go jeszcze raz. Ponieważ obecnie raczej nikt tutaj nie będzie marnował czasu ani oczu na spojrzenie. A jeżeli nie umiesz samodzielnie formatować kodu, to skorzystaj z porad, które zawartłem w tym postcie http://4programmers.net/Forum/1108392 :) A i radzę na przyszłość wklejać każdy kod zawsze w konkretne znaczniki code, a nie te ogólne. Tym razem poprawiłem.


Pozostało 580 znaków

2016-05-16 17:31

106 Invalid numeric format
Reported when a non-numeric value is read from a text file, and a numeric value was expected.

Wczytujesz text a program oczekuje liczby bo do takiej zmiennej chce przypisac wartosc. Sprobuj moze wczytac linie z pliku jako string a potem przerobic to na integer:

var
   linia: String;
   liczba: Integer;
   code: Integer;

begin
(...)
 readln(f, linia); 
   Val(linia, liczba, code); //zamieniasz string na integer
end.

Kto nigdy nie zrobił var dupa niech pierwszy rzuci kamień.
edytowany 1x, ostatnio: furious programming, 2016-05-16 17:50

Pozostało 580 znaków

2016-05-16 17:53
0

Wielkie dzięki, pomogło :)

Pozostało 580 znaków

Liczba odpowiedzi na stronę

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