PASCAL - Zadaci, resenja, problemi, izazovi...

Greska je bila u kodu, sada radi, ali nesto nije tacno.
Kod:
assign(f,'bod.txt');
   reset(f);
   while not eof(f) do
      readln(i,bod[i]);
   close(f);}
treba readln(f,i,bod(i));

Ups, procitao sam samo ovaj deo. Meni radi i kad su sve 3 datoteke takve. Ovo mi ispise:
1 SERT•dachha 165
2 SERT•IVAN 156
3 SERT•duka 150
4 SERT•BOKI 141
5 SERT•zbelca 135
6 SERT•Ezzy 126
7 STORM•BGD 120

Mozda si negde ubacio prazan red u tim datotekama ili tako nesto. Ne znam.

Nesto mi govori da nisi cuo za step by step i watches :D

Na F7 program izvrsi jednu naredbu i tako mozes naredbu po naredbu da pratis sta se desava. Naravno, da bi imao uvid tacno u to sta se desava, imas u meniju debug->watches pa tamo dodajes promenljive i onda korak po korak gledas kako se menjaju. Tako ces naci gresku uvek iako moze da potraje. Ja ne mogu da je nadjem posto kod mene ispisuje kako treba.
 
http://rapidshare.com/files/372315323/trke.rar.html

Ovde ti je moj exe, mada to je onaj isti program ciji sam kod napisao.

Program mora da bude u istom folderu kao i one datoteke mozda je tamo greska, jer su ti free i turbo paskal u razlicitim folderima pa zato radi iz turbo a ne radi iz free jer u free folderu nemas te fajlove #24,#25,...

Ne znam kakva je greska odavde, zeznuto je preko neta i pricati ovako. Sta napise kad prijavi error?
 
Kod:
uses
   SysUtils;

var
   f:text;
   fajl,red,ime:string;
   n,i,rb,j,b:integer;
   bod:array[1..100] of integer;
   ok:boolean;
   takmicar:array[1..100] of record
                                ime:string;
                                bodovi:array[1..3] ofinteger;
                                zbir:integer;
                             end;

function broj(a:string):integer;
var
   r,i:integer;
begin
   r:=0;
   for i:=1 to length(a) do
      r:=r*10+ord(a[i])-ord('0');
   broj:=r;
end;

begin
   assign(f,'bod.txt');
   reset(f);
   while not eof(f) do
      readln(f,i,bod[i]);
   close(f);
   n:=0;
   for i:=1 to 3 do
      begin
         case i of
            1: fajl:='#24.csv';
            2: fajl:='#25.csv';
            3: fajl:='#26.csv';
         end;
         if FileExists(fajl) then
            begin
               assign(f,fajl);
               reset(f);
               while not eof(f) do
                  begin
                     readln(f,red);
                     rb:=broj(copy(red,1,pos(',',red)-1));
                     delete(red,1,pos(',',red));
                     ime:=copy(red,1,pos(',',red)-1);
                     ok:=true;
                     for j:=1 to n do
                        if takmicar[j].ime=ime then
                           begin
                              takmicar[j].bodovi[i]:=bod[rb];
                              ok:=false;
                           end;
                     if ok then
                        begin
                           inc(n);
                           takmicar[n].ime:=ime;
                           takmicar[n].bodovi[1]:=0;
                           takmicar[n].bodovi[2]:=0;
                           takmicar[n].bodovi[3]:=0;
                           takmicar[n].bodovi[i]:=bod[rb];
                        end;
                  end;
               close(f);
            end;
      end;
   for i:=1 to n do
      takmicar[i].zbir:=takmicar[i].bodovi[1]+takmicar[i].bodovi[2]+takmicar[i].bodovi[3];
   for i:=1 to n-1 do
      for j:=i+1 to n do
         if takmicar[j].zbir>takmicar[i].zbir then
            begin
               b:=takmicar[i].zbir;
               takmicar[i].zbir:=takmicar[j].zbir;
               takmicar[j].zbir:=b;
               ime:=takmicar[i].ime;
               takmicar[i].ime:=takmicar[j].ime;
               takmicar[j].ime:=ime;
            end;
   assign(f,'rezultat.txt');
   rewrite(f);
   for i:=1 to n do
      writeln(f,i,' ',takmicar[i].ime,' ',takmicar[i].bodovi[1],' 'takmicar[i].bodovi[2],' 'takmicar[i].bodovi[3]);
   close(f);
end.

Valjda mislis na ovako nesto. Ne znam gde ispod da stavis zbir, ali verujem da ces znati da ga ubacis gde god hoces.
 
Ako te mrzi onda jos samo ovo(to sam vec rekao)... Ubacuje se i 4 kolona. Tri trke - tri daoteke + jos tri datoteke gde ce se nalazi dodatni bodovi. Zvace se dod1.txt dod2.txt i dod3.txt U toj datoteci se nalaze 4 imena vozaca pa razmak pa dodatni bodovi tipa real. Za svaku trku dodatna datoteka koja sadrzi samo to. I na kraju isto kao gore da ispise onako po kolonama.
 
Ovo je prethodna datoteka na izlazu...
Kod:
SERT•MIKI 55 0 0
SERT•IVAN 52 0 0
SERT•Ezzy 50 50 0
SERT•BOKI 47 0 0
SERT•Tasman 45 0 0
mega™MOKA 42 0 0
SERT•Dzordz 0 55 0
SERT•Fangio 0 52 0

dod1.txt izgleda ovako
Kod:
mega™MOKA 1.5
SERT•Dzordz 1
SERT•Fangio 1.2
SERT•Fangio 1.5
i na taj princip jos dve datoteke.
na izlazu treba da izgleda ovako
Kod:
SERT•MIKI 55 0 0 0
SERT•IVAN 52 0 0 0
SERT•Ezzy 50 50 0 0
SERT•BOKI 47 0 0 0
SERT•Tasman 45 0 0 0
mega™MOKA 42 0 0 1.5
SERT•Dzordz 0 55 0 1
SERT•Fangio 0 52 0 2.7
 
Kod:
uses
   SysUtils;

var
   f:text;
   fajl1,fajl2,red,ime:string;
   n,i,rb,j,b:integer;
   bod:array[1..100] of integer;
   ok:boolean;
   takmicar:array[1..100] of record
                                ime:string;
                                bodovi:array[1..3] of real;
                                zbir:real;
                             end;

function broj(a:string):integer;
var
   r,i:integer;
begin
   r:=0;
   for i:=1 to length(a) do
      r:=r*10+ord(a[i])-ord('0');
   broj:=r;
end;

begin
   assign(f,'bod.txt');
   reset(f);
   while not eof(f) do
      readln(f,i,bod[i]);
   close(f);
   n:=0;
   for i:=1 to 3 do
      begin
         case i of
            1: fajl1:='#24.csv';
            2: fajl1:='#25.csv';
            3: fajl1:='#26.csv';
         end;
         if FileExists(fajl1) then
            begin
               assign(f,fajl1);
               reset(f);
               while not eof(f) do
                  begin
                     readln(f,red);
                     rb:=broj(copy(red,1,pos(',',red)-1));
                     delete(red,1,pos(',',red));
                     ime:=copy(red,1,pos(',',red)-1);
                     ok:=true;
                     for j:=1 to n do
                        if takmicar[j].ime=ime then
                           begin
                              takmicar[j].bodovi[i]:=takmicar[j].bodovi[i]+bod[rb];
                              ok:=false;
                           end;
                     if ok then
                        begin
                           inc(n);
                           takmicar[n].ime:=ime;
                           takmicar[n].bodovi[1]:=0;
                           takmicar[n].bodovi[2]:=0;
                           takmicar[n].bodovi[3]:=0;
                           takmicar[n].bodovi[i]:=bod[rb];
                        end;
                  end;
               close(f);
            end;
         if FileExists(fajl2) then
            begin
               assign(f,fajl2);
               reset(f);
               while not eof(f) do
                  begin
                     ime:='';
                     read(f,slovo);
                     repeat
                        ime:=ime+slovo;
                        read(f,slovo);
                     until slovo=' ';
                     readln(f,dodatak);
                     ok:=true;
                     for j:=1 to n do
                        if takmicar[j].ime=ime then
                           begin
                              takmicar[j].bodovi[i]:=takmicar[j].bodov[i]i+dodatak;
                              ok:=false;
                           end;
                     if ok then
                        begin
                           inc(n);
                           takmicar[n].ime:=ime;
                           takmicar[n].bodovi[1]:=0;
                           takmicar[n].bodovi[2]:=0;
                           takmicar[n].bodovi[3]:=0;
                           takmicar[n].bodovi[i]:=dodatak;
                        end;
                  end;
               close(f);
            end;
      end;
   for i:=1 to n do
      takmicar[i].zbir:=takmicar[i].bodovi[1]+takmicar[i].bodovi[2]+takmicar[i].bodovi[3];
   for i:=1 to n-1 do
      for j:=i+1 to n do
         if takmicar[j].zbir>takmicar[i].zbir then
            begin
               b:=takmicar[i].zbir;
               takmicar[i].zbir:=takmicar[j].zbir;
               takmicar[j].zbir:=b;
               ime:=takmicar[i].ime;
               takmicar[i].ime:=takmicar[j].ime;
               takmicar[j].ime:=ime;
            end;
   assign(f,'rezultat.txt');
   rewrite(f);
   for i:=1 to n do
      writeln(f,i,' ',takmicar[i].ime,' ',takmicar[i].bodovi[1]:0:2,' 'takmicar[i].bodovi[2]:0:2,' 'takmicar[i].bodovi[3]:0:2);
   close(f);
end.

Bilo je malo copy/paste i ispravki tako da mozda nesto i nije ok. Srecno sa trazenjem gresaka :D
 
Malo sam se pogubio... Otarasio sam se onog uses i fileexist. Dodao jos jedan case

Kod:
var
   gr,f,pr:text;
   fajl1,fajl2,red,ime:string;
   slovo:char;
   n,i,rb,j,b:integer;
   bod:array[1..100] of integer;
   dodatak:real;
   ok:boolean;
   takmicar:array[1..100] of record
                                ime:string;
                                bodovi:array[1..3] of real;
                                zbir:real;
                             end;

function broj(a:string):integer;
var
   r,i:integer;
begin
   r:=0;
   for i:=1 to length(a) do
      r:=r*10+ord(a[i])-ord('0');
   broj:=r;
end;

begin
   assign(f,'bod.txt');
   reset(f);
   while not eof(f) do
      readln(f,i,bod[i]);
   close(f);
   n:=0;
   for i:=1 to 3 do
      begin
         case i of
            1: fajl1:='#1.csv';
            2: fajl1:='#2.csv';
            3: fajl1:='#3.csv';
         end;

               assign(f,fajl1);
               reset(f);
               while not eof(f) do
                  begin
                     readln(f,red);
                     rb:=broj(copy(red,1,pos(',',red)-1));
                     delete(red,1,pos(',',red));
                     ime:=copy(red,1,pos(',',red)-1);
                     ok:=true;
                     for j:=1 to n do
                        if takmicar[j].ime=ime then
                           begin
                              takmicar[j].bodovi[i]:=takmicar[j].bodovi[i]+bod[rb];
                              ok:=false;
                           end;
                     if ok then
                        begin
                           inc(n);
                           takmicar[n].ime:=ime;
                           takmicar[n].bodovi[1]:=0;
                           takmicar[n].bodovi[2]:=0;
                           takmicar[n].bodovi[3]:=0;
                           takmicar[n].bodovi[i]:=bod[rb];
                        end;
                  end;
               close(f);

         case i of
            1: fajl2:='dod1.txt';
            2: fajl2:='dod2.txt';
            3: fajl2:='dod3.txt';
         end;


               assign(pr,fajl2);
               reset(pr);
               while not eof(pr) do
                  begin
                     ime:='';
                     read(pr,slovo);
                     repeat
                        ime:=ime+slovo;
                        read(pr,slovo);
                     until slovo=' ';


                     for j:=1 to n do
                        if takmicar[j].ime=ime then
                           begin
                              takmicar[j].bodovi[i]:=takmicar[j].bodovi[i]+dodatak;
                              ok:=false;
                           end;
                     if ok then
                        begin
                           inc(n);
                           takmicar[n].ime:=ime;
                           takmicar[n].bodovi[1]:=0;
                           takmicar[n].bodovi[2]:=0;
                           takmicar[n].bodovi[3]:=0;
                           takmicar[n].bodovi[i]:=dodatak;
                        end;
                  end;
               close(pr);

      end;
   for i:=1 to n do
      takmicar[i].zbir:=takmicar[i].bodovi[1]+takmicar[i].bodovi[2]+takmicar[i].bodovi[3];


   assign(f,'rezultat.txt');
   rewrite(f);
   for i:=1 to n do
      write(f,i,' ',takmicar[i].ime,' ',takmicar[i].bodovi[1]:0:2,' ',takmicar[i].bodovi[2]:0:2);
      writeln(f,' ',takmicar[i].bodovi[3]:0:2);
   close(f);
   writeln('radi');
   readln;
end.
 
Ajde Nemanja sad da te vidim,ako rešiš ideš u Majkrosoft. ( ;) )

Priča ide ovako:
Seta,mudrac koji je napravio šah je tražio od cara Šerama za nagradu da mu na jedno polje šahovske table stavi zrno 'šen'ce,a na svako sledeće dvostruko više.
I sad treba da napišeš program koji ispisuje na kom polju je bilo koliko zrna i koliko je sve ukupno trebalo da se da ovom mudracu.
E sad,kod mene je problem što ovo dođe do broja sa 10 cifara i onda ispisuje nebuloze(longint valjda ne može dalje da računa),pa sam razmišljao da to metnem u string,pa svašta nešto,pa sam došao na ideju da to bude nekakav niz,odnosno svaka cifra predstavlja jedan indeks,a indeksa ima u zavisnosti koliko ima cifara,ali sam nesposoban to da uradim.:mrgreen:

Evo ti šta sam ja radio(jesam 'vala i puno uradio...) :
Kod:
program setamudrac;
 function stepen(n:longint):longint;
  var
  s,i:longint;
   begin
   s:=1;
     for i:=1 to n do
      begin
       s:=2*s;
       end;
       stepen:=s;
       end;
    var
    i,j,zb:longint;
     begin
      for i:=1 to 64 do
        writeln (i,'. polje : ',stepen(i));
        readln;
        end.
I ima jedan zadatak,kaže obilazak matrice spiralno?
To je valjda ovo:
Kod:
1 2 3 
8 9 4
7 6 5

Taj ne znam ni da započnem,ali nagađam da trebaju možda 4 petlje?
 
Jednom davno mi bilo dosadno, pa sam uradio. :D
Napravio sam proceduru(ne bas optimizovanu) koja kao fiktivne parametre uzima 2 stringa i onda ih mnozi "rucno", pa sam je iskoristio za to.

Evo kako je ispalo, polje po polje:

1
2
4
8
16
32
64
128
256
512
1024
2048
4096
8192
16384
32768
65536
131072
262144
524288
1048576
2097152
4194304
8388608
16777216
33554432
67108864
134217728
268435456
536870912
1073741824
2147483648
4294967296
8589934592
17179869184
34359738368
68719476736
137438953472
274877906944
549755813888
1099511627776
2199023255552
4398046511104
8796093022208
17592186044416
35184372088832
70368744177664
140737488355328
281474976710656
562949953421312
1125899906842624
2251799813685248
4503599627370496
9007199254740992
18014398509481984
36028797018963968
72057594037927936
144115188075855872
288230376151711744
576460752303423488
1152921504606846976
2305843009213693952
4611686018427387904
9223372036854775808


9 kvadriliona
223 triliona
372 biliona
36 milijardi
854 miliona
775 hiljada
808 osamsto osam
 
Poslednja izmena:
QWord je tip koji ima vrednosti 0-2^64-1 pa je to taman toliko koliko ti treba, jer je zbir svih zrna upravo 2^64-1.

Inace, zadatak je prilicno smesan i kad ovo ne bi bilo moguce, ali s obzirom da je moguce, mrzi me da ti pisem kod. Cak i da nema ovog tipa ili da ti trebaju veci brojevi, nije tesko napraviti niz cifara i mnoziti svaku sa svakom i samo preneti visak preko 10 u polje pored kao kod obicnog mnozenja.

Sto se tice spiralnog obilazenja matrice, nisu potrebne nikakve 4 petlje vec samo jedna i onda neka funkcija koja ce ti racunati indeks na osnovu toga. Posto u svakom krugu imas 8 elemenata manje i posto znas dimenzije matrice, mozes lako izracunati u kom krugu si trenutno a posle toga i prilicno lako na koju poziciju treba da dodjes.

Mrzi me da ti pisem kod jer se trenutno patim sa ovim http://acm.timus.ru/problem.aspx?space=1&num=1199 i oko 400 linija koda. Ako se ne snadjes reci, pa cu napisati.
 

Back
Top