Programiranje

Pascal: školski zadaci

Bobobo-bo Bo-bobo sri 19.12.2012 20:23
Mikey95 kaže...

Imam problem s ovim zadatkom, na razne načine sam ga pokušao napraviti, ali ne ide.. 

Treba napisati rekurzivni potprogram koji će za uneseni n (broj mjesta) i k (baza brojevnog sustava) ispisivati sve kombinacije od n brojeva u sustavu s k znamenki.

Znači treba biti riješen u obliku rekurzivnog potprograma, uz pomoć permutacija.

 

U permutacijama nema ponavljanja pa ne znam kako problem riješiti na taj način. Evo funkcije koja koristi rekurziju i produkt:

 

procedure Produkt(n, k: Integer; prefiks: string);
var
  i: Integer;
begin
  for i := 0 to k - 1 do
    if n = 1 then
      WriteLn(prefiks, IntToStr(i))
   else
      Product(n - 1, k, prefiks + IntToStr(i));
end;

 

Glavni program poziva funkciju s praznim stringom kao zadnjim parametrom:

 

  Produkt(3, 2, '');

Ivan(4) sri 23.1.2013 15:22

To se inače uopšte ne radi tako (osim kada se posebno zahteva zatadkom), jer je manje efikasno nego uvesti treću promenljivu.

 

BTW, istom logikom i sabiranje radi samo sa manjim brojevima, a kod većih dolazi do overflowa.

fighterZu čet 24.1.2013 11:10

Zanima me da li mogu postići da mi se pravokutnici međusobno ne dodiruju u Pacalu. Recimo ako trebam prikazati nekoliko razlicitih pravokutnika(npr.10) na razlicitim mjestima ili bar da mi ovaj jedan ne poklopi cijeli drugi kako bi svih 10 bilo vidljivo na ekranu.

Nekad mi se prikaže svih 10 ali nekad i 9 ili 8.

Ivan(4) čet 24.1.2013 13:43
fighterZu kaže...

Zanima me da li mogu postići da mi se pravokutnici međusobno ne dodiruju u Pacalu. Recimo ako trebam prikazati nekoliko razlicitih pravokutnika(npr.10) na razlicitim mjestima ili bar da mi ovaj jedan ne poklopi cijeli drugi kako bi svih 10 bilo vidljivo na ekranu.

Nekad mi se prikaže svih 10 ali nekad i 9 ili 8.

  Malo više detalja bi bilo potrebno (tekst zadatka i možda isečak iz tvog koda). Ako bi trebalo da stoje jedni do drugih, onda moraš voditi više računa o dimenzijama i pozicijama.

EllaPMgvg pon 8.4.2013 21:11

imam problema sa slijedećim zadatkom: Napisat program koji bi trebao kreirati binarno stablo natjecatelja ( ime, prezime, bodovi) tak da se oni s manjim brojem bodova stave lijevo, a s većim desno.  Takoder program treba obići i ispisat stablo na sva tri načina, omogućiti traženje natjecatelja s najmanjim i najvećim brojem bodova i omogućit ispis stabla onak kak izgleda s tim da bi trebalo ic s lijeva na desno: korijen pa dalje grananja. Sve mi je jasno osim ovog ispisa stabla onako kako izgleda. Ima ko kakvu ideju?

TracerCPP pon 8.4.2013 23:51

Ispis stabla se obično rješava rekurzijom. Nešto kao:

 

procedure ispis_stabla(grana : Stablo)
begin
    if(grana <> 0) .. // provjeriti da li je kraj rekurzije
    ispis_stabla(grana.lijevo);
    writeln(grana.vrijednost);
    ispis_stabla(grana.desno)
end;

 

Ovo sad sve napamet pišem pošto su mi stabla slabije u sjećanju, pa svakako code prilagodi svojim potrebama.

Bobobo-bo Bo-bobo čet 11.4.2013 20:00

Probaj ovako:

 

procedure PrintNatjecatelj(Natjecatelj: PNatjecatelj: Indent: string);
const
  INDENTATION = #9;
begin
  if Natjecatelj <> nil then
  begin
    PrintNatjecatelj(Natjecatelj^.Lijevi, Indent + INDENTATION);
    WriteLn(Indent, Natjecatelj^.Ime, Natjecatelj^.Prezime, Natjecatelj^Bodovi);
    PrintNatjecatelj(Natjecatelj^.Desni, Indent + INDENTATION);
  end;
end;


Ovo ispisuje drvo s korijenom na lijevom rubu ekrana, a svaki dublji nivo je uvučen tabulatorom. Ispis se pokreće sa


PrintNatjecatelj(RootNatjecatelj, '');

Zenica22 pon 15.4.2013 19:16

Pozdrav svima,potreban mi je program koji na 10 upisanih ocjena ispisuje da li je ucenik prosao (sve pozitivne ocjene),da li je pao (do 2 negativne) te da li je pao na godinu (3 ili vise negativne).Pokusavao sam ja mnogim nacinima ali nemam ideju kako da ga rijesim..Bio bih mnogo zahvalan ako bi neko mogao da mi ovo rijesi.

Bobobo-bo Bo-bobo uto 16.4.2013 20:57

Evo jednog načina:

 

var
  i, ocjena, broj_jedinica: Integer;
begin
  broj_jedinica := 0;

  for i := 1 to 10 do
  begin
    write('Unesi ', i, '. ocjenu:');
    readln(ocjena);
    if ocjena = 1 then
      broj_jedinica := broj_jedinica + 1;
  end;

  if broj_jedinica = 0 then
    writeln('Učenik je prošao')
  else if broj_jedinica <= 2 then
    writeln('Učenik je pao')
  else
    writeln('Učenik je pao godinu');
end.

Zenica22 sri 17.4.2013 00:16

Hvala na odgovoru,ali i ja sam nešto slicno uradio,međutim kada kompajliram i pokrenem program,nakon unesenih ocjena jednostavno mi izadje iz programa.Možda je greška u tome č i š. Edit: Nije do toga :S

mbaksa sri 17.4.2013 07:25
Zenica22 kaže...

Hvala na odgovoru,ali i ja sam nešto slicno uradio,međutim kada kompajliram i pokrenem program,nakon unesenih ocjena jednostavno mi izadje iz programa.Možda je greška u tome č i š. Edit: Nije do toga :S

Zašto misliš da će netko naslijepo znati što konkretno si ti radio u svom programu?

Zenica22 sri 17.4.2013 09:34
mbaksa kaže...
Zenica22 kaže...

Hvala na odgovoru,ali i ja sam nešto slicno uradio,međutim kada kompajliram i pokrenem program,nakon unesenih ocjena jednostavno mi izadje iz programa.Možda je greška u tome č i š. Edit: Nije do toga :S

Zašto misliš da će netko naslijepo znati što konkretno si ti radio u svom programu?

Ja ne znam u paskalu (znam osnove stvari tipa strukture i varijabli),radio sam ga davno,da je ovo c++ ne bih trazio pomoc,ali ovo radim za uslugu,a forum je tu da se diskutuje i pomogne ako može,ako ne može nikome ništa :)

mbaksa sri 17.4.2013 09:37
Zenica22 kaže...
mbaksa kaže...

Zašto misliš da će netko naslijepo znati što konkretno si ti radio u svom programu?

Ja ne znam u paskalu (znam osnove stvari tipa strukture i varijabli),radio sam ga davno,da je ovo c++ ne bih trazio pomoc,ali ovo radim za uslugu,a forum je tu da se diskutuje i pomogne ako može,ako ne može nikome ništa :)

Zar zaista nisi shvatio što ti govorim? Daj kod! Kako očekuješ da ti netko kaže što trebaš popraviti, ako ne zna što si uopće napravio?!

Zenica22 sri 17.4.2013 09:52
mbaksa kaže...
Zenica22 kaže...
mbaksa kaže...

Zašto misliš da će netko naslijepo znati što konkretno si ti radio u svom programu?

Ja ne znam u paskalu (znam osnove stvari tipa strukture i varijabli),radio sam ga davno,da je ovo c++ ne bih trazio pomoc,ali ovo radim za uslugu,a forum je tu da se diskutuje i pomogne ako može,ako ne može nikome ništa :)

Zar zaista nisi shvatio što ti govorim? Daj kod! Kako očekuješ da ti netko kaže što trebaš popraviti, ako ne zna što si uopće napravio?!

Prijatelju uradio sam nešto slicno kao sto je @bobo uradio,samo izmijenjena mjesta varijablama,ali ne radi (nakon izvrsavanja odma se ugasi paskal i free i dev).Dakle ovaj program od @bobo radi,ali se odma ugasi nakon ispisa da li je prosao ili ne :)

Floki sub 20.4.2013 15:16
Bobobo-bo Bo-bobo kaže...

Overflow se može izbjeći ako se koristi XOR swap:

 

a := a xor b;
b := a xor b;
a := a xor b;

Dobri su mi ovi bitovni operatori

 

a = a^b^b gdje je b^b = 0 i a^0 = a - zamjena se temelji na ovoj relaciji

 

 

Isto kao što se kod matematičkih operatora

a = a + b

b = a - b

a = a - b

 

zamjena temelji na ovoj relaciji

a = a+b-b  gdje je b-b = 0 i a + 0 = a

 

 

a nije ni ovaj bitovni operator za baciti

a&1   - ako je 1 neparni, 0 - parni

 

Aron21 pon 6.5.2013 21:56

Trenutno iz primjene racunara u energetici radimo pascal.. profesorica nam je dala svima zadatke koje moramo uraditi i posloziti tako da ih pascal moze uraditi.. Bio bih veoma zahvalan ako bi neko na ovom forumu mogao da mi uradi ovaj zadatak : Za proizvoljnih (n) otpora razlicitog karaktera izr ukupnu impedansu (z) ,frekvencija unaprijed poznata (50 Hz) formule su veoma lagane mozete naci na netu ,,,,pozdrav

bl4ck_h4ck3r_1 pon 24.2.2014 23:43

Ovako bit cu zahvalan ko mi pomogne 

Napisite program koji trazi da se sa tastature unesu cijeli brojevi m i n, a zatim iscrtava na ekranu pravougaonik sastavljen od zvjezdica cija je sirina m a visina n zvjezdica. Uputa: koristite jedan FOR iskaz koji iscrtava jedan red zvjezdica unutar drugog FOR iskaza.

ivana.bubalo2 sri 23.4.2014 15:10

Imam zadatak za seminarski rad, a stvarno nemam 3 čiste o programiranju.. bila bih vrlo zahvalna ako bi mi netko pomogao riješiti zadatak {#}

 

Zadatak: Napišite program koji ispisuje tekst, tj. izvorni kod programa u Pascalu, iz jedne datoteke u drugu datoteku tako da sve ključne riječi napišete velikim slovima.

dr.House2405 sri 23.4.2014 23:54

Evo ako netko ima viska vremena, pod uvjetom da se razumije u ovu stvar, pa ako mozete naci gresku, nesto mi ne valja sa unosom podataka, npr ako ima 2 radnika ja unesem podatke za 1. i poslije toga me izbaci.

 

{Upisati podatke o radnicima u tekst datoteku 'radnici.txt'. Redak datoteke je oblika

'Ivo Ivić 1993'. Za zadanu godinu prepisati u datoteku 'punoljetni.txt' sve radnike

koji su punoljetni.}

 

type radnik=record

    ime,prezime:string;

    god_rodenja:real

    end;

var e:file of radnik;

   f:file of radnik;

   r:radnik;

   zadgod:real;

   broj,i:integer;

begin

   writeln('Unesi broj radnika');

   readln(broj);

   for i:=1 to broj do

     begin

     assign(e,'radnici.txt');

     assign(f,'punoljetni.txt');

     rewrite(e);

     rewrite(f);

     writeln('Upisi ime radnika');

      readln(r.ime);

     writeln('Upisi prezime radnika');

      readln(r.prezime);

     writeln('Upisi godinu rodenja radnika');

      readln(r.god_rodenja);

     write(e,r);

     end;

   writeln('Zadaj neku godinu');

   readln(zadgod);

   while not eof(e) do

      begin

      read(e,r);

      if zadgod-r.god_rodenja>=18 then

      write(f,r);

      end;

   readln;

   close(e);

   close(f);

 

end.

 

 

 

 

Bobobo-bo Bo-bobo čet 24.4.2014 21:01

Blok naredbi za koji otvara datoteke (assign(e,'radnici.txt'); assign(f,'punoljetni.txt'); rewrite(e); rewrite(f);) stavi iznad for petlje. Tvoj algoritam - umjesto samo jednom na početku programa - za svakog radnika ponovo otvara i briše zadane datoteke.

 

Nedostaje i jedan reset(e); iznad while petlje . Nakon upisa u datoteku e njezina "glava za čitanje/pisanje" stoji na kraju te datoteke pa onaj eof(e) uvijek javlja da je datoteka prazna.

Square Enix uto 29.4.2014 22:15

Bio bih veoma zahvalan kad bi mi netko rijesio i malo objasnio ovaj zadatak.

 

Unose se cijeli brojevi veći od 20,manji od 1000 sve dok prosječna vrijednost parnih brojeva djeljivih sa 7 ne bude maksimalno 10% odstupala od broja 127.Ispisati broj koraka i broj unesenih brojeva.