Pascal: školski zadaci
Ljudi, da li je moguće u pascalu zamijeniti vrijednosti dvije varijable a da se ne uvodi treca (tj. da se ne uvodi pom)?
Probao sam ovako a:=b; b:=a; ali mi se izgubi ili a ili b.
Pozdrav!
Stara fora:
a:=a+b;
b:=a-b;
a:=a-b;
To radi samo na manjim brojevima. Kod većih dođe do preljeva brojevne kružnice.
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.
Overflow se može izbjeći ako se koristi XOR swap:
a := a xor b;
b := a xor b;
a := a xor b;
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.
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.
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?
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.
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, '');
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.
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.
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
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?
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 :)
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?!
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 :)
Ili program pokreneš tako da ti se konzola odmah ne zatvori ili dodaš na kraj programa prazni ReadLn.
Ili program pokreneš tako da ti se konzola odmah ne zatvori ili dodaš na kraj programa prazni ReadLn.
Drug riješio si me muke,mnogo ti hvala :) read je odradio svoje :D
ili stavis readkey
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
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
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.
Izvinjavam se za dupli post samo da kazem da se radi o programu za pascal i treba mi hitnooooooo
Evo ovako:
var
m, n, r, s: Integer;
begin
Write('Unesi m:');
Readln(m);
Write('Unesi n:');
Readln(n);
for r := 1 to n do
begin
for s := 1 to m do
Write('*');
Writeln('');
end;
end.
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.
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.
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.
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.
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, '');