Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.

Invalid numeric format ?

[es] :: Pascal / Delphi / Kylix :: Invalid numeric format ?

[ Pregleda: 2176 | Odgovora: 4 ] > FB > Twit

Postavi temu Odgovori

Autor

Pretraga teme: Traži
Markiranje Štampanje RSS

overdose

Član broj: 33563
Poruke: 51
200.48.218.*



Profil

icon Invalid numeric format ?13.09.2004. u 16:50 - pre 211 meseci
Poslednje pitanje (iz datoteka) od mene. Obecavam :)

Ulazna tekstualna datoteka sadrži u svakom redu prezime osobe, njeno ime i telefon. Podaci su razdvojeni blanko znacima. Napisati potprogram na Pascal-u koji formira binarnu datoteku od podataka onih osoba iz ulazne datoteke koje imaju zadato prezime. Prezime i ime upisati kao jedinstveni niz znakova, a telefon kao ceo broj. Prezime i ime zajedno nisu duži od 50 znakova. Priložiti glavni program kome nedostaje samo izvršni deo.

Code:

program April_98(ulaz,izlaz);
  type
    podatak=record
              prezime_ime:array[1..50] of char;
              telefon:integer
            end;
    bin_dat=file of podatak;
  var
    ulaz:text;
    izlaz:bin_dat;
    
procedure Obradi;
  var
    osoba:podatak;
    a:array[1..50] of char;
    i,j,n,fon,brojac:integer;
    slovo:char;
  begin
    while not eof(ulaz) do
      begin
        slovo:='a'; {*Inicijalizacija na bilo koje slovo*}
        i:=1;
        while slovo <> ' ' do
          begin
              read(ulaz,slovo);
              a[i]:=slovo;
              i:=i+1
          end;
        read(ulaz,slovo);
        if slovo in ['0'..'9']
          then
            begin
                readln(ulaz);
                i:=1
              end
          else
              begin
                repeat
                  a[i]:=slovo;
                  i:=i+1;
                  read(ulaz,slovo)
                until slovo <> ' ';
                read(ulaz,fon);
                readln(ulaz);
                brojac:=i;
                i:=1;
                for j:=1 to brojac do osoba.prezime_ime[j]:=a[j];
                osoba.telefon:=fon;
                write(izlaz,osoba)
              end
      end
  end;


begin
  assign(ulaz,'ulaz.txt'); reset(ulaz);
  assign(izlaz,'izlaz.dat'); rewrite(izlaz);
  Obradi;
  close(ulaz);
  close(izlaz)
end.


ulaz.txt

Code:

Ciric Cira 3748969
Pera 8090463
Perovic Perka 677944
Baba Sera 0639863
Djura 988


Kod se uspesno prevede, ali ne i izvrsi. Greska je kod linije
Code:
read(ulaz,fon);
i kaze da je pogresan numericki format. A 10 puta sam gledao i tacno nalece na broj po kodu ili ja ne vidim dobro ;)

oVeRdOsE
 
Odgovor na temu

reiser

Član broj: 7895
Poruke: 2314



+102 Profil

icon Re: Invalid numeric format ?13.09.2004. u 18:39 - pre 211 meseci
Code:

type
  BinStruct = record
                Name  : Array[1..50] of Char;
                Phone : LongInt;
              end;

var
  SFile  : Text;
  TFile  : File of BinStruct;
  c      : Char;
  Person : BinStruct;
  C1     : Integer;

begin
  Assign(SFile, 'C:\ulaz.txt');
  Reset(SFile);
    Assign(TFile, 'C:\izlaz.txt');
    Rewrite(TFile);
      While not Eof(SFile) Do
      Begin
        FillChar(Person.Name, SizeOf(Person.Name), ' ');
        C1 := 0;
        repeat
          Inc(C1);
          Read(SFile, c);
          Person.Name[C1] := c;
        until c = ' ';
        Read(SFile, c);
        If not (c in ['0'..'9']) Then
        Begin
          Inc(C1);
          Person.Name[C1] := c;
          repeat
            Inc(C1);
            Read(SFile, c);
            Person.Name[C1] := c;
          until c = ' ';
        End;

        ReadLn(SFile, Person.Phone);
        Write(TFile, Person);
      End;
    Close(SFile);
  Close(TFile);
end.
 
Odgovor na temu

overdose

Član broj: 33563
Poruke: 51
200.48.218.*



Profil

icon Re: Invalid numeric format ?14.09.2004. u 09:27 - pre 211 meseci
Marko, tvoj kod radi posao ako se malo prepravi. Naime, tvoj program bi upisivao sve podatke, a ne samo one koji imaju prezime. Samo treba povuci citanje telefona i upis u datoteku iznad end-a, a ne ispod:

Code:

Program April_98(ulaz,izlaz);
  type bin_dat=record
                 ime_prezime:array[1..50] of char;
                 telefon:longint
               end;
  var
    ulaz:text;
    izlaz:file of bin_dat;
    ch:char;
    osoba:bin_dat;
    i:Integer;

begin
  assign(ulaz,'ulaz.txt'); reset(ulaz);
  assign(izlaz,'izlaz.dat'); rewrite(izlaz);
  while not eof(ulaz) do
    begin
      {FillChar(osoba.ime_prezime, SizeOf(osoba.ime_prezime), ' ');}
      i:=0;
      repeat
        i:=i+1;
        read(ulaz, ch);
        osoba.ime_prezime[i]:=ch;
      until ch=' ';
      read(ulaz,ch);
      if not (ch in ['0'..'9']) then
        begin
          i:=i+1;
          osoba.ime_prezime[i]:=ch;
          repeat
            i:=i+1;
            read(ulaz,ch);
            osoba.ime_prezime[i]:=ch;
          until ch=' ';
          readln(ulaz,osoba.telefon);
          write(izlaz,osoba)
        end
    end;
  close(ulaz);
  close(izlaz);
end.


Interesuje me da li mogu da izostavim FillChar ? U tom slucaju program isto radi, ali vidim da je malo drugacija struktura nego sa FillChar.

over
 
Odgovor na temu

stameni
Ivan Stamenković

Član broj: 6739
Poruke: 453



+8 Profil

icon Re: Invalid numeric format ?14.09.2004. u 09:45 - pre 211 meseci
Ovaj zadatak nemoguće je rešiti: u promenljivu tipa integer nemoguće je smestiti vodeće nule, pa broj telefona Babe Sere nikako ne bi mogao da bude smešten u slog.

Zanemarujući to, i pretpostavljajući da nam je potreban program u što standardnije mogućem Pascalu (ništa od stringova, sve je niz znakova), napisao sam programče koje radi kako treba. Program je poboljšan time što eliminiše nepotrebne blankove, a ipak vodi računa o tome da je moguće uneti npr. samo ime, bez prezimena.

Uz to, u zavisnosti od sizeof(integer) moguće je da se broj telefona ne može smestiti u promenljivu tog tipa, pa sam koristio longint.


Code:

program april_98;
{$R+}

const
   maxn = 50;
   maxline = 100;

type
   podatak = record
                prezime_ime: array[1..maxn] of char;
                telefon: longint
             end;
   bin_dat = file of podatak;

var
   ulaz: text;
   izlaz: bin_dat;

procedure obradi;
   var
      osoba: podatak;
      niz: array[1..maxline] of char;
      i, j, n: 0..maxline;
      ch: char;
   begin
      while (not eof(ulaz)) do
         begin
            { Array initialization may be omitted }
            for i := 1 to maxn do
               begin
                  osoba.prezime_ime[i] := '#';
                  niz[i] := '#'
               end;
            n := 1;
            j := 0;
            while not eoln(ulaz) do
               begin
                  read(ulaz, ch);
                  if (ch <> ' ') then
                     begin
                        niz[n] := ch;
                        n := n + 1
                     end;
                  if ((ch = ' ') and (n > 1)) then
                     if (niz[n - 1] <> ' ') then
                        begin
                           niz[n] := ch;
                           n := n + 1;
                           j := j + 1
                        end;
               end;
            readln(ulaz);
            { Array processing }
            i := 1;
            while (niz[i] <> ' ') do
               begin
                  osoba.prezime_ime[i] := niz[i];
                  i := i + 1
               end;
            if (j > 1) then
               begin
                  osoba.prezime_ime[i] := niz[i];
                  i := i + 1;
                  while (niz[i] <> ' ') do
                     begin
                        osoba.prezime_ime[i] := niz[i];
                        i := i + 1
                     end
                  end;
            i := i + 1;
            osoba.telefon := 0;
            while (i < n) do
               begin
                  osoba.telefon := 10 * osoba.telefon + (ord(niz[i]) - 48);
                  i := i + 1
               end;
            write(izlaz, osoba)
         end
   end;

begin
   assign(ulaz, 'ulaz.txt');
   reset(ulaz);
   assign(izlaz, 'izlaz.dat');
   rewrite(izlaz);
   obradi;
   close(izlaz);
   close(ulaz)
end.
 
Odgovor na temu

stameni
Ivan Stamenković

Član broj: 6739
Poruke: 453



+8 Profil

icon Re: Invalid numeric format ?14.09.2004. u 09:57 - pre 211 meseci
Hm, izgleda da smo Marko i ja prevideli isti problem :)
 
Odgovor na temu

[es] :: Pascal / Delphi / Kylix :: Invalid numeric format ?

[ Pregleda: 2176 | Odgovora: 4 ] > FB > Twit

Postavi temu Odgovori

Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.