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

Opet smjesan skolski zadatak :D

[es] :: Pascal / Delphi / Kylix :: Opet smjesan skolski zadatak :D

[ Pregleda: 3848 | Odgovora: 9 ] > FB > Twit

Postavi temu Odgovori

Autor

Pretraga teme: Traži
Markiranje Štampanje RSS

Passwd

Član broj: 54624
Poruke: 640
*.adsl.net.t-com.hr.



Profil

icon Opet smjesan skolski zadatak :D28.09.2005. u 21:04 - pre 226 meseci
Evo kako glasi zadatak:

Sjećate li se zadataka iz matematike kada ste morali između brojeva staviti znakove operatora kako bi dobili određeni broj? Sada je vaš zadatak postaviti operatore ‘+’, i ‘–‘ između četiri učitana broja, kako bi dobili peti. Ako se ne može dobiti taj peti broj, tada potražite kombinaciju kojom mu dolazite najbliže.

Ulazni podaci

S tipkovnice se učitava 5 cijelih brojeva (svi će biti između 0 i 1000, uključivo).

Izlazni podaci

Na ekran treba ispisati kako se pomoću prva četiri broja i operacija ‘+’ i ‘-‘ može dobiti peti, a u slučaju da se ne može dobiti, ispisati kombinaciju kojom mu se najbliže dolazi. Ukoliko postoji više kombinacija da se dobije potreban rezultat, dovoljno je ispisati jednu.

Primjeri:
ulaz: 1 1 1 1 4
izlaz: 1+1+1+1=4

ulaz:11 3 6 9 5
izlaz:11 – 3 + 6 – 9 = 5


Evo koda:


Code:

program zad3;
uses crt;
var br1,br2,br3,br4,br5,x,br,min:integer;
    s:array [1..18] of string;
    s1,s2,s3:array [1..18] of string;
    rez,ost:array [1..18] of integer;
begin
clrscr;
readln(br1,br2,br3,br4,br5);




rez[1]:=br1+br2+br3+br4;
s1[1]:='+';
s2[1]:='+';
s3[1]:='+';

rez[2]:=br1+br2+br3-br4;
s1[2]:='+';
s2[2]:='+';
s3[2]:='-';

rez[3]:=br1+br2-br3-br4;
s1[3]:='+';
s2[3]:='-';
s3[3]:='-';

rez[4]:=br1-br2-br3-br4;
s1[4]:='-';
s2[4]:='-';
s3[4]:='-';

rez[5]:=br1-br2+br3+br4;
s1[5]:='-';
s2[5]:='+';
s3[5]:='+';

rez[6]:=br1-br2-br3+br4;
s1[6]:='-';
s2[6]:='-';
s3[6]:='+';

rez[7]:=br1-br2+br3-br4;
s1[7]:='-';
s2[7]:='+';
s3[7]:='-';

rez[8]:=br1+br2-br3+br4;
s1[8]:='+';
s2[8]:='-';
s3[8]:='+';



for x:=1 to 9 do
begin
if rez[x]=br5 then begin
                   writeln(br1,'',s1[x],'',br2,'',s2[x],'',br3,'',s3[x],'',br4,'=',br5);
                   readln;
                   exit;
                   end;
end;



for x:=1 to 9 do
begin
if rez[x]>br5 then
                   begin
                   ost[x]:=rez[x]-br5;
                   end
                                              else
begin
ost[x]:=br5-rez[x];
end;
end;



min:=100;
for x:=1 to 8 do
begin
if ost[x]<min then min:=ost[x];
end;

for x:=1 to 8 do
begin
if ost[x]=min then begin
                   writeln(br1,'',s1[x],'',br2,'',s2[x],'',br3,'',s3[x],'',br4,'=',rez[x]);
                   readln;
                   exit;
                   end;
end;



end.



Naravno, meni se kod cini sascim u redu i trebalo bi po mome da radi (i radi na nekim primjerima) ali konkretno ne radi dobro kod ovoga:

ulaz:1 2 3 4 5



svaki savjet dobro dodje

poz
 
Odgovor na temu

Srki_82
Srdjan Tot
Me @ My Home
Ljubljana

Član broj: 28226
Poruke: 1403
82.208.201.*

ICQ: 246436949


+10 Profil

icon Re: Opet smjesan skolski zadatak :D28.09.2005. u 22:07 - pre 226 meseci
Pa... na brzaka sam pogledao (nisam gledao sta program radi) i vidim da dodajes vrednosti promenljivoj rez od 1 do 8, a posle trazis od 1 do 9 :) Nije ni cudo sto ne radi :)
Posle ost malo trazis od 1 do 8, a malo od 1 do 9. Imas 9 kombinacija sa operatorima (2^3 + 1) tako da uvek moras da radis sa 9 mogucih vrednosti.
 
Odgovor na temu

milika
Milika Delic
RD
NS

Član broj: 13221
Poruke: 120
*.nspoint.net.



Profil

icon Re: Opet smjesan skolski zadatak :D29.09.2005. u 05:41 - pre 226 meseci
Srki gresis 8komb treba nema tu +1

evo coda koji radi (delphi console)
Code:

program Project1;

{$APPTYPE CONSOLE}

uses
  SysUtils;


var br1,br2,br3,br4,br5,x,br,min:integer;
    s:array [1..8] of string;
    s1,s2,s3:array [1..8] of string;
    rez,ost:array [1..8] of integer;
begin
//clrscr;
readln(br1,br2,br3,br4,br5);




rez[1]:=br1+br2+br3+br4;
s1[1]:='+';
s2[1]:='+';
s3[1]:='+';

rez[2]:=br1+br2+br3-br4;
s1[2]:='+';
s2[2]:='+';
s3[2]:='-';

rez[3]:=br1+br2-br3-br4;
s1[3]:='+';
s2[3]:='-';
s3[3]:='-';

rez[4]:=br1-br2-br3-br4;
s1[4]:='-';
s2[4]:='-';
s3[4]:='-';

rez[5]:=br1-br2+br3+br4;
s1[5]:='-';
s2[5]:='+';
s3[5]:='+';

rez[6]:=br1-br2-br3+br4;
s1[6]:='-';
s2[6]:='-';
s3[6]:='+';

rez[7]:=br1-br2+br3-br4;
s1[7]:='-';
s2[7]:='+';
s3[7]:='-';

rez[8]:=br1+br2-br3+br4;
s1[8]:='+';
s2[8]:='-';
s3[8]:='+';



for x:=1 to 8 do
begin
if rez[x]=br5 then begin
                   writeln(br1,'',s1[x],'',br2,'',s2[x],'',br3,'',s3[x],'',br4,'=',br5);
                   readln;
                   exit;
                   end;
end;



for x:=1 to 9 do
begin
if rez[x]>br5 then
                   begin
                   ost[x]:=rez[x]-br5;
                   end
                                              else
begin
ost[x]:=br5-rez[x];
end;
end;



min:=1000;
for x:=1 to 8 do
begin
if ost[x]<min then min:=ost[x];
end;

for x:=1 to 8 do
begin
if ost[x]=min then begin
                   writeln(br1,'',s1[x],'',br2,'',s2[x],'',br3,'',s3[x],'',br4,'=',rez[x]);

                   end;
end;

                   readln;


end.
 
Odgovor na temu

Srki_82
Srdjan Tot
Me @ My Home
Ljubljana

Član broj: 28226
Poruke: 1403
82.208.201.*

ICQ: 246436949


+10 Profil

icon Re: Opet smjesan skolski zadatak :D29.09.2005. u 08:49 - pre 226 meseci
Ups... pazi stvarno :)

Nego... sta je poenta proveravati rez[9] kad tu nema nista upisano, a i rez je deklarisan od 1 do 8!? Mislim... nema logike!?
 
Odgovor na temu

Passwd

Član broj: 54624
Poruke: 640
*.adsl.net.t-com.hr.



Profil

icon Re: Opet smjesan skolski zadatak :D29.09.2005. u 09:29 - pre 226 meseci
Citat:
Srki_82
Nego... sta je poenta proveravati rez[9] kad tu nema nista upisano, a i rez je deklarisan od 1 do 8!? Mislim... nema logike!?


Ma znam za to, prvo sam napravio od 1 do 8 provjeru, ali posto nije radilo a trebalo je da radi sa zadnjom kombinacijom (8-om) te sam onda bezveze prosirio jer nisam vidio gresku nigdje

Sad jos imam par pitanja, koji je najbrzi algoritam za sortiranje i kako radit sa brojevima koji imaju preko 100 znamenaka
 
Odgovor na temu

Srki_82
Srdjan Tot
Me @ My Home
Ljubljana

Član broj: 28226
Poruke: 1403
82.208.201.*

ICQ: 246436949


+10 Profil

icon Re: Opet smjesan skolski zadatak :D29.09.2005. u 10:43 - pre 226 meseci
Kazu da je najbrzi quicksort. Imas primer za tu vrstu sortiranja u primerima koji idu sa TP7.

Za uzasno velike brojeve moras napraviti sam svoj sistem cuvanja podataka i funkcije koje ce obavljati matematicke operacije. Najlaksi nacin ti je da koristis niz bcifara i da tako cuvas brojeve. Jeste da ces koristiti ceo bajt za cuvanje samo jedne cifre pa ces tako prakticno baciti 4 bita jer su ti samo 4 bita dovoljna da oznacis cifru iz dekadnog sistema, ali bar neces komplikovati.

BTW: Nabavi Borland Pascal 7 ako mozes... mnogo je mocniji od Turbo Pascal 7 (mozes da prvis dll-ove, da radis sa Win registry i jos mnogo stvari ;) )
 
Odgovor na temu

Passwd

Član broj: 54624
Poruke: 640
*.adsl.net.t-com.hr.



Profil

icon Re: Opet smjesan skolski zadatak :D29.09.2005. u 20:04 - pre 226 meseci
Malo su pretjerali, vremensko ogranicenje 1 sekunda po izvrsavanju nekog zadatka, postavljena ogranicenja na heap i stack memoriju, ne smjes koristit opce rijec uses......

dal bi program mozda brze izvodio operacije ako bi izravno pristupao procesoru, tj. pisao kod u asm-u?
 
Odgovor na temu

Passwd

Član broj: 54624
Poruke: 640
*.adsl.net.t-com.hr.



Profil

icon Re: Opet smjesan skolski zadatak :D29.09.2005. u 20:59 - pre 226 meseci
Il evo i ovaj zadatak me zaxexava
Opet mislim da je kod u redu (trebao bi radit do 99 znakova kriptirane rijeci), ali zapravo ne radi, tj. ne ispisuje rijec...

evo kako glasi zadatak:
Naši junaci Mirko i Slavko počeli su se baviti arheologijom i dakako ubrzo nabasali na nevjerojatno otkriće. Njih dvoje su pronašli ostatke drevne civilizacije koja se, kao i mi, služila latinicom i arapskim brojkama. Ta civilizacija je često koristila jednostavne kriptirane poruke koje Mirko i Slavko mogu čitati ali im to oduzima previše vremena, pa je red na vama da im osigurate program koji će to činiti umjesto njih.
Sistem kriptiranja je vrlo jednostavan: slova nisu na svojim mjestima nego je iza svakog slova navedeno mjesto na kojem bi se ono trebalo nalaziti, primjerice: r3n1p2 znači da bi se slovo r trebalo nalaziti na trećem mjestu, slovo n na prvom a slovo p na drugom, te dešifrirana riječ glasi npr.

Sa tastature treba unjeti kriptiranu riječ, a zatim na ekran ispisati dekriptiranu.
Riječi će se sastojati isključivo od malih slova engleske abecede, te brojeva. Kriptirana riječ neće biti duža od 100 znakova.



PRIMJERI

ULAZ
u2b1
IZLAZ
bu

ULAZ
d1a3v2
IZLAZ
dva

ULAZ
e6r7r2p1m4i3j5
IZLAZ
primjer



evo kod:

Code:

program zadatak2;
uses crt;
var kript,rijec,s,st,pro:string;
    sl:char;
    broj,br,g,x,y:integer;

begin

clrscr;

s:='';

readln(kript);

for x:=1 to length(kript) do
begin

for sl:='a' to 'z' do
begin
if kript[x]=sl then begin

                              for y:=1 to 9 do
                              begin
                              pro:='';
                              str(y,pro);
                              if kript[x+1]=pro then begin
                                                   str(y,st);
                                                   s:=s+st;
                                                   end;
                              end;

                              for y:=1 to 9 do
                              begin
                              pro:='';
                              str(y,pro);
                              if kript[x+2]=pro then begin
                                                   str(y,st);
                                                   s:=s+st;
                                                   end;
                              end;


                              val(s,broj,g);

                              rijec[broj]:=kript[x];

                              end;

end;

end;


for x:=1 to length(rijec) do
write(rijec[x]);
readln;

end.


naravno, svaki odgovor/uputa dobro dodje

[Ovu poruku je menjao Passwd dana 29.09.2005. u 22:00 GMT+1]
 
Odgovor na temu

Celebmegil
Nedic Aleksandar

Član broj: 64720
Poruke: 12
212.200.124.*



Profil

icon Re: Opet smjesan skolski zadatak :D29.09.2005. u 22:50 - pre 226 meseci
Mislim da bi ovo trebalo da radi

Code:

program Zad;

var
 niz:array[0..1000]of char;
 ulaz:string;
 izlaz:string;
 i,j,d,l:integer;
 c:char;
begin
 readln(ulaz);
 l:=0;
 i:=0;
 d:=0;
 repeat
  inc(i);
  case ulaz[i] of
   '0': begin d:=d*10; end;
   '1': begin d:=d*10;d:=d+1; end;
   '2': begin d:=d*10;d:=d+2; end;
   '3': begin d:=d*10;d:=d+3; end;
   '4': begin d:=d*10;d:=d+4; end;
   '5': begin d:=d*10;d:=d+5; end;
   '6': begin d:=d*10;d:=d+6; end;
   '7': begin d:=d*10;d:=d+7; end;
   '8': begin d:=d*10;d:=d+8; end;
   '9': begin d:=d*10;d:=d+9; end;
   else
    begin
     niz[d]:=c;
     inc(l);
     d:=0;
     c:=ulaz[i];
    end;
  end;
 until i=length(ulaz);
 if d<>0 then  niz[d]:=c;
 izlaz:='';
 for i:=1 to l do izlaz:=izlaz+niz[i];
 writeln(izlaz);
end.


A ogranicenja po ACM pravilim uopste nisu preterana jer se traze algoritmi sa sto boljom vremenskom i prostornom optimizacijom.
 
Odgovor na temu

Srki_82
Srdjan Tot
Me @ My Home
Ljubljana

Član broj: 28226
Poruke: 1403
82.208.201.*

ICQ: 246436949


+10 Profil

icon Re: Opet smjesan skolski zadatak :D01.10.2005. u 14:24 - pre 225 meseci
Ovo resenje ima zastitu od pogresnog unosa sifrirane reci tako da ces biti bezbedan cak i ako namerno budu ubacili neku pogresnu rec da bi ti zeznuli program. Moguce greske za koje se vrsi provera je pogresan raspored oznaka... npr. ako umesto c1o3a2 unesu 1c3o2a, ili ako na primer imesto slova pokusaju da stave brojeve 112233. Druga greska je pokusavanje unosenja broja veceg od 99 npr. c100a99b88. Treca greska na koju se obraca paznja je unosenje koda koji nema podatke za sve karaktere... primer: a2o3. Nigde ne postoji podatak za karakter broj 1. Poslednja zastita je pokusavanje unosenja podataka vise puta za jedan isti karakter. Primer: c1a2o3f2. Dva puta se pojavljuje podatak za karakter pod rednim brojem 2. To je to.

Code:
program Passwd_Zad2;

function DecodeData(S: String): String;
var
  R: String;
  I, N, dS: Byte;
  C: Char;
begin
  I := 1;
  FillChar(R, SizeOf(R), 0);
  dS := 0;

  while I < Length(S) do
  begin
    if S[I] in ['0'..'9'] then
    begin
      R := '';
      Break;
    end;
    C := S[I];


    Inc(I);
    if not(S[I] in ['0'..'9']) then
    begin
      R := '';
      Break;
    end;
    N := Ord(S[I]) - Ord('0');

    Inc(I);
    if S[I] in ['0'..'9'] then
    begin
      N := N * 10 + Ord(S[I]) - Ord('0');
      Inc(I);
    end;

    Inc(dS);
    R[N] := C;
    R[0] := Chr(dS);
  end;

  for I := 1 to dS do
    if R[I] = #0 then
    begin
      R := '';
      Break;
    end;

  if R = '' then
    R := 'Greska u sifriranoj reci';
  DecodeData := R;
end;

var
  Data: String;

begin
  Write('Unesi sifrovanu rec: ');
  ReadLn(Data);
  WriteLn('Resenje je: ', DecodeData(Data));
  ReadLn;
end.

 
Odgovor na temu

[es] :: Pascal / Delphi / Kylix :: Opet smjesan skolski zadatak :D

[ Pregleda: 3848 | Odgovora: 9 ] > FB > Twit

Postavi temu Odgovori

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