|
[ dimnicar @ 29.11.2009. 23:23 ] @
| Negde mu je greska,a lak program....
var
suma,bh,bs,bd,bp,bdva,bjedan:integer;
{ Program za odredjivanje najmanjeg broja novcanica u nekoj sumi novca X }
write ( 'Molim upisite neku sumu novca: ');
readln(suma);
bh := suma div 1000 ;
bs := bh div 100 ;
bd := bs div 10 ;
bp := bd div 5 ;
bdva := bp div 2 ;
bjedan := bdva div 1 ;
readln;
writeln ( 'Broj hiljadarki je: ',bh);
writeln ( 'Broj stotki je: ',bs);
writeln ( 'Broj desetica je: ',bd);
writeln ( 'Broj petica je: ',bp);
writeln ( 'Broj dvojki je: ',bdva);
writeln ( 'Broj jedinica je: ',bjedan);
readln
Ovaj program mi pokazuje samo broj hiljadarki,ali ne i stotinarki,desetica,petodinarki,dvodinarki i (jednog)dinara...,za njih pokazuje 0.
|
[ del-boy @ 29.11.2009. 23:38 ] @
Davno sam radio paskal, pa nisam siguran, ali mislim da div beše celobrojno deljenje, a mod ostatak pri celobrojnom deljenju. Ako je tako, onda ne računaš dobro...
Ako sam dobro skontao šta hoćeš da uradiš onda ovako nešto treba da sračunaš za bs (broj stotina, pretpostavljam):
bs := (suma mod 1000) div 100;
analogno i za ostale...
Dakle, ideja je da kad sumu podeliš celobrojni sa 1000 dobićeš broj hiljada. E sad, da bi dobio broj stotna treba OSTATAK od 1000 da deliš sa 100. Tako ćeš, ako imaš sumu recimo 2356 za hiljade dobiti 2, a za stotine 3... Sad ti računaj dalje :)
[ dimnicar @ 30.11.2009. 14:23 ] @
Hvala
Zaboravio sam na MOD...
malo ga razradih i sad je bolje,al nikao da mi da dvodinarke i dinare....
evo sta uradih
write ( 'Molim upisite neku sumu novca: ');
readln(suma);
bh := suma div 1000 ;
writeln ( 'Broj hiljadarki je: ',bh);
bs := (suma mod 1000) div 100 ;
writeln ( 'Broj stotki je: ',bs);
bd := (suma mod 100) div 10 ;
writeln ( 'Broj desetica je: ',bd);
bp := (suma mod 10) div 5 ;
writeln ( 'Broj petica je: ',bp);
bdva := (suma mod 10) div 2 ;
writeln ( 'Broj dvojki je: ',bdva);
bjedan := bdva div 1 ;
writeln ( 'Broj jedinica je: ',bjedan);
readln ;
[ rambo @ 30.11.2009. 17:08 ] @
Najjednostavniji način:
Code: program Project1;
{$APPTYPE CONSOLE}
uses
SysUtils;
var
suma, bh, bs, bd, bp, bdva, bjedan: integer;
begin
try
Write('Molim upisite neku sumu novca: ');
ReadLn(suma);
bh := suma div 1000 ;
WriteLn('Broj hiljadarki je: ', bh);
bs := (suma mod 1000) div 100;
WriteLn('Broj stotki je: ', bs);
bd := (suma mod 100) div 10;
WriteLn('Broj desetica je: ', bd);
bp := (suma mod 10) div 5;
WriteLn('Broj petica je: ', bp);
bdva := ((suma mod 10) - (bp * 5)) div 2;
WriteLn('Broj dvojki je: ', bdva);
bjedan := ((suma mod 10) - (bp * 5) - (bdva * 2)) div 1;
WriteLn('Broj jedinica je: ', bjedan);
readln;
except
on E:Exception do
Writeln(E.Classname, ': ', E.Message);
end;
end.
[ dimnicar @ 01.12.2009. 13:30 ] @
Hvala Deki
radi,a uspeo sam da mu dodam i broj pedesetica sa ovim kodom
bpd := (suma mod 100) div 50;
writeln ( 'Broj pedesetica je: ',bpd);
Konacan izgled programa je ova ,Radi!!!
program ProjectMinNovac;
{$APPTYPE CONSOLE}
uses
SysUtils;
var
suma,bh,bs,bpd,bd,bp,bdva,bjedan:integer;
begin
try
{ Program za odredjivanje najmanjeg broja novcanica u nekoj sumi novca X }
write ( 'Molim upisite neku sumu novca: ');
readln(suma);
bh := suma div 1000 ;
writeln ( 'Broj hiljadarki je: ',bh);
bs := (suma mod 1000) div 100 ;
writeln ( 'Broj stotki je: ',bs);
bpd := (suma mod 100) div 50;
writeln ( 'Broj pedesetica je: ',bpd);
bd := ((suma mod 100)- (bpd * 50 ))div 10 ;
writeln ( 'Broj desetica je: ',bd);
bp := (suma mod 10) div 5 ;
writeln ( 'Broj petica je: ',bp);
bdva := ((suma mod 10) - (bp * 5)) div 2;
writeln ( 'Broj dvojki je: ',bdva);
bjedan := ((suma mod 10) - (bp * 5 ) - (bdva * 2)) div 1 ;
writeln ( 'Broj jedinica je: ',bjedan);
readln ;
except
on E:Exception do
Writeln(E.Classname, ': ', E.Message);
end;
end.
[ Rapaic Rajko @ 01.12.2009. 15:51 ] @
Hm... ovo jako lici na jedan davni programski zadatak na testu kandidata u poznatoj novobeogradskoj softverskoj firmi.
Rajko
[ dimnicar @ 03.12.2009. 16:47 ] @
Rajko,ako ti nije problem ,postavi ovde neke od resenih zadataka,mislim ceo kod,ali slicno ovome i da je Pocetnicki nivo.
[ dimnicar @ 04.12.2009. 23:34 ] @
Evo jos jednog veoma prostog,najprostijeg pocetnickog zadatka.Napisao sam program koji trazi da se upise ime,a potom i prezime ,a paskal daje kao rezultat puno ime.
Sve sam ispravno napisao,barem tako mislim,ali on nece da mi da rezultat ,da ispise PUNO IME!!!
Gde sam sad pa ovde pogresio???
program Project3;
{$APPTYPE CONSOLE}
uses
SysUtils;
var
ime,prezime,punoime:string;
begin
try
writeln('Upisi svoje ime: ');
readln;
writeln ('upisi svoje prezime ');
readln;
punoime := ime + prezime ;
readln;
writeln ( 'Vase puno ime je ' , punoime);
readln;
except
on E:Exception do
Writeln(E.Classname, ': ', E.Message);
end;
end.
[ bojan21 @ 04.12.2009. 23:47 ] @
Nigde nisi dodelio vrednost za ime i prezime. Umesto prvog ReadLn treba:
Code:
readLn(ime);
a umesto drugog:
Code:
readLn(prezime);
dodatak: Bolje je da stavis:
Code:
punoime := ime + ' ' + prezime; //kao rezultat dace npr 'Petar Petrovic' umesto 'PetarPetrovic' sto daje u tvom primeru
i da, slobodno obrisi readLn koje stoji ispod dodeljivanja vrednosti promenljivoj punoime, nije ti potrebno.
[ dimnicar @ 05.12.2009. 00:30 ] @
Hvala Bojane
Taman sam uspeo da otkrijem svoju gresku,kad ti ga vec resio.Ovaj zadatak je poceo vec da me obeshrabruje.Tek kad sam se vratio na proizvod i kolicnik sa readln(broj1)itd,shvatio sam da sam to nacisto ispustio sa imenom i prezimenom,a potom kad mi se puno ime pojavilo zajedno,pogledah u knjigu i videh ono za space ' ', i za nul niz i za apostrof. Izgubih par sat za ovako prost zadatak.Umalo da se nacisto obeshrabrim.
Hvala jos jednom na brzini.Trebaces mi ponovo.
Code:
program imeprezime;
{$APPTYPE CONSOLE}
uses
SysUtils;
var
ime,prezime,punoime:string ;
begin
try
{Program koji od korisnika zahteva da upise ime,a zatim to ime da spoji
sa nekom porukom }
Writeln ('Molim unesite vase ime ');
readln(ime);
Writeln ( 'Molim upisite vase prezime ') ;
readln(prezime) ;
punoime := ime + ' '+ prezime ;
writeln ( 'Pozdravljam Vas Gospodine ',punoime,' Da li ste dobro');
readln;
except
on E:Exception do
Writeln(E.Classname, ': ', E.Message);
end;
end.
edit (savkic): Koristi code tagove da uokviriš kod, olakšavaju praćenje.
[Ovu poruku je menjao savkic dana 05.12.2009. u 03:17 GMT+1]
[ dimnicar @ 05.12.2009. 23:34 ] @
Zadatak selektovanja sa or-ukljucivo
napisati program koji ce proveriti da li se broj koji je korisnik napisao nalazi izmedju brojeva 21 i 29(Ukljucivo),i prikazati odgovarajucu poruku.
Ne znam svrhu ovog zadatka jer po logici dovoljno je da je jedan iskaz tacan (drugi moze biti i netacan).
Evo kako sam ga ja uradio,ali mu ne znam svrhu.Koji god broj da upisem odkucava mi istu poruku...
program Project2;
{$APPTYPE CONSOLE}
uses
SysUtils;
var
broj1:integer;
begin
try
{ poredjenje brojeva radi iskaza ukljucivo }
writeln( 'Molim upisite jedan broj ');
readln (broj1);
if (broj1 >=21) or (broj1 <=29) then
writeln ('Broj se ne mora nalazi u trazenoj vrednosti izmedju brojeva 21 i 29 ukljucivo ')
else
writeln ('Broj se ne nalazi na listi trazenih vrednosti');
readln;
except
on E:Exception do
Writeln(E.Classname, ': ', E.Message);
end;
end.
[ bojan21 @ 05.12.2009. 23:57 ] @
Ovo ' ukljucivo' se valjda odnosi na to da se posmatra zatvoreni interval [21, 29] - sto u prevodu znaci da brojevi 21 i 29 ispunjavaju uslov da se nalaze izmedju brojeva 21 i 29.
Ako analiziras tvoj kod, shvatices da je vrednost IF iskaza uvek tacna (ako je broj veci od 20 onda je prvo tacno, ako je manji od 20 onda sledi i da je manji od 30, pa je u tom slucaju i drugo tacno - uvek dobijas tacno kao rezultat).
Posto treba da koristis OR onda je logicno da proveravas da li se broj nalazi sa " leve" ili " desne" strane intervala. Ako se ne nalazi, onda pripada intervalu. Dakle:
Code:
if (broj1 < 21) or (broj1 > 29)
then
writeLn('Broj ne pripada zadatom zatvorenom intervalu.')
else
writeLn('Broj pripada zadatom zatvorenom intervalu.');
[ dimnicar @ 06.12.2009. 23:25 ] @
_________________________________________________________________
Windows Live: Keep your friends up to date with what you do online.
http://www.microsoft.com/middl...AGL:ON:WL:en-xm:SI_SB_1:092010
--_9b549211-a756-4308-91c9-ffed4b118d73_
Content-Type: text/html; charset="iso-8859-1"
Content-Transfer-Encoding: quoted-printable
<html>
<head>
<style><!--
.hmmessage P
{
margin:0px;
padding:0px
}
body.hmmessage
{
font-size: 10pt;
font-family:Verdana
}
--></style>
</head>
<body class='hmmessage'>
Hvala Bojane<br>ja zapeo ko mutav na telefon.Resio da ubacim i znak jednakosti,=,pa ispadalo >= i <= i to me pokopalo u samom startu.<br>Sitnice koje zivot znace. Ovde bas treba dobro mozgati.<br><br>> To: [email protected]<br>> Subject: Re: Greske u Paskal programiranju [elitesecurity.pracenje.teme]<br>> From: [email protected]<br>> Date: Sun, 6 Dec 2009 00:57:47 +0100<br>> <br>> Ovo '*ukljucivo*' se valjda odnosi na to da se posmatra zatvoreni interval [21, 29] - sto u prevodu znaci da brojevi 21 i 29 ispunjavaju uslov da se nalaze izmedju brojeva 21 i 29. <br>> <br>> Ako analiziras tvoj kod, shvatices da je vrednost IF iskaza uvek tacna (ako je broj veci od 20 onda je prvo tacno, ako je manji od 20 onda sledi i da je manji od 30, pa je u tom slucaju i drugo tacno - uvek dobijas *tacno* kao rezultat).<br>> <br>> Posto treba da koristis *OR* onda je logicno da proveravas da li se broj nalazi sa "*leve*" ili "*desne*" strane intervala. Ako se ne nalazi, onda pripada intervalu. Dakle:<br>> <br>> <br>> <br>> Code: <br>> <br>> if (broj1 < 21) or (broj1 > 29) <br>> <br>> then<br>> <br>> writeLn('Broj ne pripada zadatom zatvorenom intervalu.')<br>> <br>> else<br>> <br>> writeLn('Broj pripada zadatom zatvorenom intervalu.');<br>> <br>> <br>> <br>> --<br>> http://www.elitesecurity.org/p2458319<br>> <br>> Prijave/odjave: http://www.elitesecurity.org/pracenje#383222<br>> <br>> Ne menjajte sledece dve linije ukoliko odgovarate putem emaila!<br>> esauth:383222:b6aa198125d5dedb68408f814070f45c<br>> Odgovor pisite *iskljucivo* ispod ove linije:<br> <br /><hr />Windows Live: Keep your friends up to date <a href=' http://www.microsoft.com/middl...AGL:ON:WL:en-xm:SI_SB_1:092010' target='_new'>with what you do online.</a></body>
</html>
--_9b549211-a756-4308-91c9-ffed4b118d73_--
[ dimnicar @ 07.12.2009. 00:03 ] @
evo ga isti ,ali prosiren zadatak.
Upisivanje brojeva izvan opsega treba da pise poruka da li je broj iznad ili ispod opsega.
Evo ga uradjen ,ali imam neka pitanja u vezi ovoga zadatka
program prosirenoukljuvo;
{$APPTYPE CONSOLE}
uses
SysUtils;
var
broj1:integer;
begin
try
{ selektovanje ukljucivo izmedju 21 i 29 prosiren iskaz }
writeln ('Molim upisite broj ');
readln (broj1);
if (broj1<21) then
writeln('Broj je ispod ranga ');
if (broj1>29) then
writeln('Broj je iznad ranga ') ;
if (broj1<21) or (broj1 > 29) then
writeln ('Broj nije u rangu ')
else
writeln ('Broj je u rangu 21-29 ');
readln;
except
on E:Exception do
Writeln(E.Classname, ': ', E.Message);
end;
end.
I to me namuci.
probao sam uzaludno nova 4 reda da stavim ispod iskaza OR
(if (broj1<21) then
writeln('Broj je ispod ranga ');
if (broj1>29) then
writeln('Broj je iznad ranga ') 
Stalno mi je bila greska kad unesem manji broj od 21,pisalo je i da je ispod ranga i da je u rangu,ostalo je bilo ok.
Samo zato sam morao ta 4 reda da stavim ispred iskaza OR,i proradilo je.
Da li mi je ispravan ovaj nacin razmisljanja,ili je moglo to i bolje?
[ bojan21 @ 07.12.2009. 02:23 ] @
Razmisljas suvise "neprirodno". Shvati ovo kao dobronamernu kritiku, ja nemam nista od toga da ti ne naucis da programiras kao profesionalac.
Ako opet pogledas svoj algoritam, on se sastoji iz tri dela:
Code: 1. deo:
- proveri da li je broj manji od 21
- ako je manji onda ispisi da je ispod ranga
- ako nije, bas me briga
2. deo
- proveri da li je broj veci od 29
- ako je veci onda ispisi da je iznad ranga
- ako nije, opet bas me briga
pitanje: sta ako je ispunjen uslov iz prvog dela (da je broj manji od 21), sto sad da dzaba proveravas da je veci od 29
kad znas da nije - bezveze trosis procesorsko vreme; hocu da kazem, da ti u ovaj deo treba da udjes ako si dobio
da je iskaz iz prvog [b]IF[/b]-a netacan (tj da broj nije manji od 21 - tek onda valja proveravati da li je veci od 29)
3, deo
- pitas da li je broj manji od 21 ili veci od 29 (ali sto? to si vec pitao u prva dva dela)
- ako je to tacno ispisi poruku da nije u intervalu (opet sto? u prva dva dela si obezbedio da prikaze odgovarajuce poruke ako je to tacno)
- ako nije tacno onda ispisi poruku da je u intervalu (e ovo je jedino sto ti treba od svega iz 3. dela - da ispises informaciju da je broj u intervalu)
pitanje: slicno kao za 2. deo - ako je bar jedan od uslova iz 1. i 2. dela ispunjen ti dzabe ulazis ovde (naime, ako je tacno 1. ili 2. onda je broj ili
manji 21 ili veci od 29 tako da u ovaj deo koda bespotrebno ulazis)
Evo ti zadatak:
Ti si u skoli, prvi cas je cas fizickog vaspitanja. Stizes u skolu, ukapiras da treba da ides na fizicko i kazes u sebi: "Ma ko shisha fizicko, gde da ga radim na
ovakvoj hladnoci". Krenes u ucionicu da prespavas taj cas, ali avaj, u'vati te profesor i kaze: "Biraj - ili da ti upisem jedinicu ili da mi resis zadatak". Ti mislis:
"bolje da resavam zadatak, u suprotnom dobijam keca ko vrata, onog betonskog. Ako ne resim, bar sam pokusao".
I profesor ti napise tri broja na tabli i kaze:
"Reci mi, da li je treci broj iznad, ispod ili u intervalu kojeg cine prva dva broja?"
Sigurno mu neces pisati Pascal kod na tabli, vec ces logicki resiti zadatak. E to je ono sto ti treba: nacin na koji si resio zadatak "usmeno" kod profesora sad treba samo da
pretvoris u kod - redom kako si mislio i dosao do resenja.
Evo kako si mogao to mnogo elegantnije da resis:
Code:
if (broj1 < 21) then //proveravamo da li je broj ispod intervala
writeLn("Broj je ispod intervala) //ispisujemo odgovarajucu poruku ako jeste
else //ako nije onda znamo da je veci pa treba da proverimo da li je iznad
if (broj1 > 29) then //proveravamo da li je iznad intervala
writeLn("Broj je iznad intervala) //ispisujemo odgovarajucu poruku ako jeste
else //ako nije onda mora biti u intervalu
writeLn("Broj je u intervalu); //(nije iznad, a nije ni ispod, nema treceg)
Samo nastavi da vezbas, i za mesec dana ces se smejati ovome 
[ dimnicar @ 07.12.2009. 12:10 ] @
Ma bunilo me ono "OR ",sto je trazeno da bude u zadatku,pa sam probao sablonski.Primetio sam i ja da je to sabloniziranje,bez razmisljanja ,pa sam zato i trazio logicniju postavku.
Cujemo se i hvala.
[ tkaranovic @ 07.12.2009. 15:08 ] @
Posto se dimnicar pozdravio verovatno ovu poruku neće skoro pročitati, a meni je ostala nedoumica šta je tačno bila postavka drugog zadatka i(li) u kakvoj je vezi sa prvim.
Ako je prvi zadatak rešava sa OR, a drugi je: " isti, ali prosiren zadatak". Onda je:
1. zadatak (kopirano od gore):
Code:
if (broj1 < 21) or (broj1 > 29)
then
writeLn('Broj ne pripada zadatom zatvorenom intervalu.')
else
writeLn('Broj pripada zadatom zatvorenom intervalu.');
2. zadatak (drugi je isti kao 1. zadatak ali prosiren, sto znaci da je OR obavezno + prosirenje):
Code:
if (broj1 < 21) or (broj1 > 29) then begin
if (broj1 < 21) then
writeLn("Broj je ispod intervala)
else
writeLn("Broj je iznad intervala);
end else
writeLn('Broj pripada zadatom zatvorenom intervalu.');
[ dimnicar @ 08.12.2009. 21:20 ] @
program prosirenoukljuvo;
{$APPTYPE CONSOLE}
uses
SysUtils;
var
broj1:integer;
begin
try
{ selektovanje ukljucivo izmedju 21 i 29 prosiren iskaz }
writeln ('Molim upisite broj ');
readln (broj1);
if (broj1<21) then
writeln('Broj je ispod ranga ');
if (broj1>29) then
writeln('Broj je iznad ranga ') ;
if (broj1<21) or (broj1 > 29) then
writeln ('Broj nije u rangu ')
else
writeln ('Broj je u rangu 21-29 ');
readln;
except
on E:Exception do
Writeln(E.Classname, ': ', E.Message);
end;
end.
zadatak je prosiren,uz obavezno "Or
[ tkaranovic @ 09.12.2009. 06:06 ] @
Sada tek vidim da je ovo rešenje i u poruci u kojoj je i ovo pitanje:
Citat: dimnicar:
Da li mi je ispravan ovaj nacin razmisljanja,ili je moglo to i bolje?
To jeste rešenje zadatka. Koliko je dobro i kakav je način razmišljanja treba da da onaj ko bude ocenjivao rešenje.
[ dimnicar @ 10.12.2009. 00:36 ] @
Program nece da mi odradi racunsku operaciju,ne znam,da li zbog zagrada ili neceg drugog...?
program Project2;
{$APPTYPE CONSOLE}
uses
SysUtils;
const
satnica = 50 ;
var
brojsati,zarada:integer;
begin
try
{ Napisati program koji od korisnika zahteva da upise broj sati odradjenih u sedmici
i zaradu po satu(satnici).Program treba da izracuna bruto nedeljnu platu.
Ako je broj odradjenih sati veci od 40,prekovremeni sati se placaju 2 puta vise.
Ako upisani broj sati nije izmedju 0 i 60,program pokazuje poruku o greski. }
writeln ( 'Molim upisite broj sati provedenih u radu za nedelju dana ');
readln (brojsati);
if (brojsati> 0) and (brojsati <= 40) then ;
zarada := brojsati * satnica ;
if (brojsati > 40) and (brojsati<=60) then;
zarada := (40 * satnica) + ((60- brojsati)* 2)) ;
writeln('Bruto nedeljna zarada radnika iznosi ',zarada );
readln
else
writeln('Niste mogli raditi vise od 60 sati u nedelji ');
readln
except
on E:Exception do
Writeln(E.Classname, ': ', E.Message);
end;
end.
[ tkaranovic @ 10.12.2009. 15:21 ] @
Citat: dimnicar:
writeln ( 'Molim upisite broj sati provedenih u radu za nedelju dana ');
readln (brojsati);
if (brojsati> 0) and (brojsati <= 40) then ;
zarada := brojsati * satnica ;
if (brojsati > 40) and (brojsati<=60) then ; begin
zarada := (40 * satnica) + ((60- brojsati)* 2) ) ;
writeln('Bruto nedeljna zarada radnika iznosi ',zarada );
readln
end else
writeln('Niste mogli raditi vise od 60 sati u nedelji ');
readln
Samo tehnički gledano: crveno je višak a plavo manjak.
[ dimnicar @ 11.12.2009. 23:42 ] @
ma,ispravio sam greske ,probao,al pokazuje nelogican rezultat.
Izgleda da sam nesto i nelogicno napisao.
Probao,ispravljao,probao ,ispravljao i nece da radi....
Drugar mi je uradio zadatak i radi super,ali na drugi nacin.
meni je krivo sto nece na ovaj moj nacin.Sve mi je logicno,uz naravno ispravljene greske ,ali prikazuje pogresan rezultat.
[ tkaranovic @ 12.12.2009. 11:57 ] @
Ako je broj sati veći od 40, onda ćeš taj višak dobiti oduzimanjem 40, a ne oduzimanjem od 60.
(brojsati)41 - 40 = 1 čas više, kako i jeste
60 - (brojsati)41 = 19 časova više (što manje prekovremeno radiš to si više plaćen :))
60 - (brojsati)60 = 0 (ovo bi se svakom kapitalisti svidelo :) radiš 20 časova više a nisi uopšte plaćen za to)
Copyright (C) 2001-2025 by www.elitesecurity.org. All rights reserved.
|