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

cvele2:
Pa ja sam to i radio u početku, ako si zaboravio. I eno šta mi se pojavljivala ona poruka, već sam vam predstavljao taj problem.

A u vezi ovog drugog, stvarno ne vidim u čemu je problem. Jesi li testirao program? Meni savršeno radi. Unesi bilo koje vrednosti, malo preračunaj i dobija se tačno.
Ne sećam se da si bilo kada napisao da ulaznu i izlaznu datoteku posmatraš kao tekst datoteku. Prvo je bila datoteka nekog tipa dvodimenzionalni niz (2 x 2) integera, a potom integer.

Ovu druga primedbu je pogrešna. Učinilo mi se da piše nešto drugo. Izvini.
 
Zaboravio. Da bar objasnim kako ide pa cu valjda sutra stavti

Prvi netreba posebno objasnjavati. Trezenje stringa unutar stringa. Dva niza dvije for petlje i jedna varijable tipa boolean.

Od pocetka niza do kraja minus duzina drugog niza. i onda ispitujes da li je se poklapaju.

Drugi: Zapreminu ces izracunati tako sto prebojis ukupan broj elemenata, dok povrsina je za teze uraditi. Najlakse da izracunas povrsinu jednog elementa, pa pomnozis sa brojem elemenata. Od tog broja oduzimas povrsine stranica koje se dodiruju.

Resenja valjda sutra.

PS. Delphi mi nesto neradi :cry:
 
Nemanja666:
Zaboravio. Da bar objasnim kako ide pa cu valjda sutra stavti

Prvi netreba posebno objasnjavati. Trezenje stringa unutar stringa. Dva niza dvije for petlje i jedna varijable tipa boolean.

Od pocetka niza do kraja minus duzina drugog niza. i onda ispitujes da li je se poklapaju.

Drugi: Zapreminu ces izracunati tako sto prebojis ukupan broj elemenata, dok povrsina je za teze uraditi. Najlakse da izracunas povrsinu jednog elementa, pa pomnozis sa brojem elemenata. Od tog broja oduzimas povrsine stranica koje se dodiruju.

Resenja valjda sutra.

PS. Delphi mi nesto neradi :cry:

Pise se NE RADI
 
Ja sam radio onaj sa šifrom ali nešto mi ne radi. Evo koda:
Kod:
program sifra;
  var f,g:text;
      ch:char;
      s1,s2:string;
      i,m,n,x,y:integer;
      ok:boolean;
begin
     assign(f,'sifra.dat'); reset(f);
     assign(g,'sifra.res'); rewrite(g);
     readln(f,m);
     i:=1;
     while not eoln(f) do
     begin
     readln(f,ch);
     s1[i]:=ch;
     i:=i+1;
     end;
     readln(f,n);
     i:=1;
     while not eoln(f) do
     begin
     readln(f,ch);
     s2[i]:=ch;
     i:=i+1;
     end;
     x:=0;
     ok:=true;
     while ok do
     begin
     if pos(s1,s2)<>0 then begin
                           y:=pos(s1,s2);
                           delete(s2,y,m);
                           ok:=true;
                           x:=x+1;
                           end
                      else ok:=false;
     end;
     write(g,x);
     close(f);
     close(g);
end.
Jednostavno ne radi.
 
XXAleksaXX:
Ali to je nesto najosnovnije, kakve ima veze sto je to programiranje sa tim da si ti nepismen kao da nemas ni osnovnu skolu?

Zurim se dok kucam, negledam sta pisem i gledam kako bilo da bar samnjim tekst bar za i jedno slovo.

Evo resenja zadatka sifra. Uradio sam ga FreePascal-u jer mi Delphi kako sam vec rekao neradi. Resenje sam uradjeno kako sam i naveo da ga je najlakse uraditi.

Kod:
program Sifra;
{$mode objfpc}
var
  LenSifra : integer;
  LenKucano : integer;
  Sifra : array[1..100] of char;
  Kucano : array[1..10000] of char;
  
procedure LoadData(FileName : string);
var
  iFile : TextFile;
  i : integer;
  TempChar : char;
begin
  AssignFile(iFile, FileName);
  Reset(iFile);
  Readln(iFile, LenSifra);
  for i := 1 to LenSifra do
    begin
      Read(iFile, TempChar);
      Sifra[i] := TempChar;
    end;    
  Readln(iFile, LenKucano);
  for i := 1 to LenKucano do
    begin
      Read(iFile, TempChar);
      Kucano[i] := TempChar;
    end;        
  CloseFile(iFile);     
end;

procedure SaveData(FileName : string; Value : integer);
var
  oFile : TextFile;
begin
  AssignFile(oFile, FileName);
  Rewrite(oFile);
  Writeln(oFile, Value);
  CloseFile(oFile);
end;

function Number : integer;
var
  i, j : integer;
  IsSifra : boolean;
begin
  result := 0;
  for i := 1 to LenKucano - LenSifra + 1 do
    begin
      IsSifra := true;
        for j := 1 to LenSifra do
          if Sifra[j] <> Kucano[i + j - 1] then
            begin
              IsSifra := false;
              break;
            end;  
      if IsSifra then Inc(result);
    end;
end;

begin
  LoadData('ulaz.txt');
  SaveData('izlaz.txt', Number);
end.
 
Mnogo ga komplikujes. Mada mozda je to najprostije moguce, ne znam. Evo jednog zadatka i njegovog resenja.
"Mali Perica je dobio špil od 2*N karata obeleženih redom od 1 do 2*N i meša ih na sledeći način:
* Preseče špil tačno na pola i dobije dve gomile A i B od N karata, gde je A gornja polovina i B donja polovina.
* Kombinuje karte tako što redom uzima kartu sa gomile A, pa kartu sa gomile B i stavlja na zajedničku gomilu, dok ne izmeša svih 2*N karata.
Perica tako meša karte ponovo i ponovo, dok ne dobije prvobitan raspored karata (1,2,3,...,2*N). Zanima ga koliko puta mora da promeša špil da bi se karte vratile u originalan raspired.
Ulaz - U prvom redu ulazne datoteke karte.in se nalazi broj N (1<=N<=5000).
Izlaz - U izlazni fajl karte.out treba upisati broj mešanja potrebnih da se 2*N karata vrate u originalnu poziciju."

Evo i rešenja:
Kod:
program karte;
  var a,b,c:array [1..100] of integer;
      input,output: text;
      i,n,x,k:integer;
      ok:boolean;
begin
     {writeln('Unesi broj karata n:');
     readln(n);}
     assign(input,'karte.in'); reset(input);
     assign(output,'karte.out'); rewrite(output);
     readln(input,n);
     for i:=1 to n do
         begin
         a[i]:=i;
         b[i]:=n+i;
         end;
     ok:=false;
     x:=1;
     k:=0;
     while not ok do
           begin
                for i:=1 to n do
                    begin
                         c[x]:=a[i];
                         x:=x+1;
                         c[x]:=b[i];
                         x:=x+1;
                    end;
                x:=0;
                k:=k+1;
                for i:=2 to 2*n do
                    if c[i]<c[i-1] then x:=x+1;
                if x<>0 then begin
                            ok:=false;
                            {for i:=1 to 2*n do
                                write(c[i]:2);
                                writeln;}
                            for i:=1 to n do
                                a[i]:=c[i];
                            for i:=1 to n do
                                b[i]:=c[n+i];
                            end
                       else if x=0 then ok:=true;
                x:=1;
           end;
     writeln(output,k);
     close(input);
     close(output);
end.
 
Prvo da te pitam odakle si kada pitaš "kod vas u Srbiji"?
Drugo, kako može svako sledeće takmičenje da je još lakše? Uvek je teže i iscrpljujuće!
Ja sam jedva izdržao ova 4 sata za regionalno, a kako li ću 5 sati ili dva dana po tri sata za republičko...?! Ej zna li neko gde će se održati republičko takmičenje?
 
Kod nas u RS po tezini zadataka republicko i regionalno se malo razlikuju, barem meni. Na republickom imamo tri sata a na regionalno dva. Na republickom cetiri puta vise ljudi ide dalje nego na regionalnom. Kad se ovo uzme u obzir naravno da je lakse. Neko mi je pricao da kod vas bude takmicenja (tipa kod nas regionalnog) i ko tu osvoji vise od odrecenog broja bodova prolazi dalje. Znaci ako u regiji osvoje svi vise od tog broja bodova ide dalje. Pa me zanima da li je to istina?

Pozz!
 

Back
Top