kako to da sad nema ni round ni trunc? xDDD
Pascal: školski zadaci
- poruka: 546
- |
- čitano: 168.022
- |
- moderatori:
Lazarus Long, XXX-Man, vincimus
- +/- sve poruke
- ravni prikaz
- starije poruke gore
trebam pomoc neznam uraditi ovaj zadatak
napisati program koji n brojeva i racuna njegovu aritmeticku sredinu i zaokruzuje na dvije decimale
molim pomoc
Pardon, sa div i mod :)
sa mod
trebam pomoc neznam uraditi ovaj zadatak
napisati program koji n brojeva i racuna njegovu aritmeticku sredinu i zaokruzuje na dvije decimale
molim pomoc
Evo jedna varijanta resenja.
Program sredina; var i,n,s,x:integer; ars:real; begin write('Unesite koliko brojeva ');
readln(n); s:=0; for i:=1 to n do begin read(x); s:=s+x; end; ars:=s/n; writeln('Aritmeticka sredina je ',ars:0:2);
readln;
end.
napisati program koji unosi n brojeva i broji koliko jednocifrenih brojeva ima?
dali bih neko znao uraditi mi i ovaj zadatak...
napisati program koji unosi n brojeva i broji koliko jednocifrenih brojeva ima?
dali bih neko znao uraditi mi i ovaj zadatak...
program zadatak;
var a,n,i,x:integer;
begin
writeln('Unesi ukupan broj brojeva koje zelis provjeriti');
readln(a);
i:=0;
for x:=1 to a do
begin
readln(n);
if n div 10=0 then inc(i);
end;
writeln (i, ' brojeva u ovom skupu ima jednu znamenku');
readln;
end.
napisati program koji unosi n brojeva i broji koliko jednocifrenih brojeva ima?
dali bih neko znao uraditi mi i ovaj zadatak...
Program jednocifreni; var i,n,x,br:integer; begin write('Koliko brojeva zelite '); readln(n); br:=0; for i:=1 to n do begin read(x); if abs(x)<10 then br:=br+1; end; writeln('Jednocifrenih brojeva ima ',br); end.
Pozdrav! Imam jedan zadatak za rjesiti, nisam siguran kako.
Ulazni podatak je prirodan broj x u binarnom zapisu. Potrebno je odrediti broj jedinica binarnom zapisu toga broja.
Npr. ulaz x=1001
ispis Broj 1001 ima 2 jedinice u binarnom zapisu.
Počeo sam nešto, ali program ne radi...
program binarni;
var x,g,br_jed:integer;
begin
writeln('Upisite broj u binarnom zapisu');
readln(x);
repeat
g:= x mod 10;
if g <> 0 then
x := x div 10;
inc (br_jed);
until x = ?;
writeln('Broj ima ',br_jed,' jedinice');
readln;
end.
Normalno da ne radi kad:
- u svakoj iteraciji uvećavaš varijablu br_jed! Znači, uopće nema veze je li broj jedinica ili ne - ti ćeš uvijek računati kao da je jedinica
- početni broj "skraćuješ" samo ako je zadnja znamenka različita od nule!
Da ne znam bolje, rekao bih da si zamijenio linije x := x div 10; i inc (br_jed);
Stavljaj vertikalne razmake prije i poslije konstrukcija kao što su if, for itd., da ti bude naprednije. Malo si razmisli o logici programa - po kojoj bi on logici trebao raditi? Prvo si napiši logiku brojanja jedinica na papir pa vidi jel ti logika programa odgovara toj matematičkoj logici.
Pozdrav! Imam jedan zadatak za rjesiti, nisam siguran kako.
...
evo kod
program jedinice;
uses crt;
var x:string[255];
a,b:integer;
begin
writeln('Upisi broj');
readln(x);
for a:=1 to length(x) do
begin
if (x[a]='1') then b:=b+1;
if (x[a]<>'0') and (x[a]<>'1') then
begin
writeln('broj nije u binarnom zapisu!');
readkey;
exit;
end;
end;
writeln('U upisanom broju ima ',b,' jedinica');
readkey;
end.
Hvala ti, ali nismo još radili procedure niti funkcije, a program treba rješiti sa repeat petljom!
I taj string ne znam što je...
@mbaksa: Znači program ide:
...
br_jed:=0;
readln(x);
m:=x;
repeat
g:= x mod 2;
if g mod 2 <> 0 then begin
inc(br_jed);
x:= x div 2;
end;
until x = ?
writeln('Broj ',m,' ima ',br_jed,' u binarmo zapisu.');
readln;
end.
A što sa until? Kada će program prestati?
Evo ti,ali slijedeći put razmisli malo prije nego staviš neki lagani program .
program lagani;var zz,binarni,jedinice:integer;beginwriteln('Upisi binarni broj');readln(binarni);jedinice:=0;repeatzz:=binarni mod 10; //učita zadnju znamenkuif zz = 1 then jedinice:=jedinice+1;binarni:=binarni div 10; // odbaci zadnju znamenkuuntil binarni = 0;writeln('Ima ',jedinice,' jedinica');readln;end.
Znači nije trebalo if g mod 2 <> 0 then... nego if g = 1... Uglavnom skužio sam, hvala ti!
![poslano s mobilnog telefona](/forum/slike/frommobile.png)
Napišite program koji će učitati prirodan broj te ustanoviti i ispisati da li taj broj sadrži točno jednu parnu znamenku.
Npr. broj= 1835
broj sadrži točno jednu parnu znamenku (8).
- Iako nisam baš siguran ovo za točno jednu parnu znamenku. Valjda je to što sam napisao u redu.
Ako stavim npr. kod inc(parne) h:=g, hoće li on onda ispisati ... ima točno jednu parnu znamenku ',h; i koja je to znamenka?
program parni;
var broj,g,h,m,parne:integer;
begin
writeln('Upisite prirodan broj.');
readln(broj);
parne:=0;
m:= broj;
while broj > 0 do begin
g := broj mod 10;
if g mod 2 = 0 then
inc(parne);
broj := broj div 10;
end;
if parne = 1 then
writeln(' Broj ',m,' ima točno jednu parnu znamenku') else writeln('Ima više od 1 parne znamenke.');
readln;
end.
Nauči se pravilno indentirati tekst - znači stavljati razmake. To treba ići hijerarhijski - ono što je na nižoj hijerarhijskoj razini treba uvući (za dva razmaka)! Također je dobro složene naredbe koje sadrže blokove (poput if..then begin..end) vertikalnim razmacima odvojiti od ostatka koda.
Dok ne počneš pravilno hijerarhijski stavljati razmake, češće ćeš raditi semantičke greške, jer nećeš znati što se događa u kojem slučaju.
Tvoj kod bi trebao izgledati otprilike ovako (btw uklonio sam ti varijablu g - što će ti ta varijabla, ako rezultat operacije broj mod 10 nigdje ne koristiš, osim kod jednog if-a?):
var
broj, m, parne: Integer;
begin
WriteLn('Upisite prirodan broj.');
ReadLn(broj);
parne:=0;
m:= broj;
while broj > 0 do
begin
if broj mod 10 = 0 then inc(parne);
broj := broj div 10;
end;
if parne = 1 then WriteLn(' Broj ',m,' ima točno jednu parnu znamenku')
else WriteLn('Ima više od 1 parne znamenke.');
ReadLn;
end.
Je li ti jasno zašto sam oblikovao kod tako kako sam oblikovao? Je li sad kod čitkiji, je li jasno što je na kojoj hijerarhijskoj razini?
Moram napomenuti i ovo - imenuj varijable tako da se točno zna čemu služe - dakle, da i osoba koja prvi put vidi tvoj program da zna čemu služi koja varijabla. Imena varijabli g, m, h (gdje uopće koristiš varijablu h!?) - su ti besmislena.
Napišite program koji će učitati prirodan broj te ustanoviti i ispisati da li taj broj sadrži točno jednu parnu znamenku.
...
evo ga,
program parni;
var broj, m, parne: integer;
begin
WriteLn('Upisite prirodan broj.');
ReadLn(broj);
parne:=0;
m:= broj;
while broj > 0 do
begin
if broj mod 2 = 0 then inc(parne); //provjerava se parnost broja, time i zadnje znamenke
broj := broj div 10; //odbacuje se zadnja znamenka
end;
if parne = 1 then WriteLn('broj ',m,' ima tocno jednu parnu znamenku.')
else if parne > 1 then WriteLn('ima vise od 1 parne znamenke.')
else writeln('broj nema parnih znamenki.');
readln;
end.
Napišite program koji će učitati prirodan broj te ustanoviti i ispisati da li taj broj sadrži točno jednu parnu znamenku.
...
evo ga,
program parni;
var broj, m, parne: integer;
begin
WriteLn('Upisite prirodan broj.');
ReadLn(broj);
parne:=0;
m:= broj;
while broj > 0 do
begin
if (broj-(broj div 10)) mod 2 = 0 then inc(parne); //provjerava se parnost zadnje znamenke
broj := broj div 10; //odbacuje se zadnja znamenka
end;
if parne = 1 then WriteLn('broj ',m,' ima tocno jednu parnu znamenku.')
else if parne > 1 then WriteLn('ima vise od 1 parne znamenke.')
else writeln('broj nema parnih znamenki.');
readln;
end.
Prethodni primer nije tacan!! Oznaceni red treba da izgleda ovako.
if broj mod 2 = 0 then inc(parne);
if (broj-(broj div 10)) mod 2 = 0 then inc(parne); //provjerava se parnost zadnje znamenke
Koja je logika iza ove linije? Kako bi trebao raditi taj tvoj algoritam?
Recimo da je broj 75. Znači, tvoja formula je:
(75-(75 div 10)) mod 2 =
(75 - 7) mod 2 =
68 mod 2 = 0 -- parno! (a počeli smo s brojem koji ima sve znamenke neparne!)
UVIJEK provjeri da ti program izbaci pravo rješenje - jesi ti program uopće testirao? Nije dovoljno da se program samo pokrene.
Također, bilo bi pametno da si ovako "na papir" raspišeš stvar, da vidiš što se točno događa.
if (broj-(broj div 10)) mod 2 = 0 then inc(parne); //provjerava se parnost zadnje znamenke
Koja je logika iza ove linije? Kako bi trebao raditi taj tvoj algoritam?
...
uf, sry, radio sam na brzinu pa je tak ispalo, nego, trebalo je radit tako da se od prvotnog broja (recimo 745) oduzme vrijednost svega veceg od desetica, tako da bi bilo
(745-740) mod 2, ispustio sam mnozenje sa 10
evo kako je taj redak trebao izgledati:
if (broj-((broj div 10)*10)) mod 2 = 0 then inc(parne);
ali da, ta komplikacija nije ni potrebna, ne znam zasto mi je to prvo palo na pamet, svejedno se kasnije skida zadnja znamenka, znaci provjera broj mod 2=0 stoji
uf, sry, radio sam na brzinu pa je tak ispalo, nego, trebalo je radit tako da se od prvotnog broja (recimo 745) oduzme vrijednost svega veceg od desetica, tako da bi bilo
(745-740) mod 2, ispustio sam mnozenje sa 10
evo kako je taj redak trebao izgledati:
if (broj-((broj div 10)*10)) mod 2 = 0 then inc(parne);
ali da, ta komplikacija nije ni potrebna, ne znam zasto mi je to prvo palo na pamet, svejedno se kasnije skida zadnja znamenka, znaci provjera broj mod 2=0 stoji
Meni se čini da ti uopće ne kužiš čemu služi operacija mod.
broj-((broj div 10)*10) je isto što i broj mod 10! Jel shvaćaš da kad tražiš ostatak od dijeljenja (dakle - mod, tj. modulo) s deset (broj mod 10), da zapravo uzimaš vrijednost zadnje znamenke? Dakle, ako ti je baza deset i ti tražiš ostatak od dijeljenja s 10, ti si izolirao zadnju znamenku.
Naravno, u slučaju parnosti nema potrebe za tim, pošto odmah možeš broj mod 2. Ali da znaš za ubuduće - nema potrebe za egzibicijama kakve si izvodio - tu je operacija mod.
Treba mi program koji racuna tri broja a zatim ispisuje najmanji od ta tri, ja znam zadak do pola...
program kkk;
uses crt;
var a,b,c,aa,bb,cc:real;
begin
writeln ('Unesi varijable');
readln (aa,bb,cc);
a:=aa/5;
b:=bb/6;
c:=cc/7;
...
E sada kad izracuna ova tri broja od njih treba da ispise najmanji.
Treba mi program koji racuna tri broja a zatim ispisuje najmanji od ta tri, ja znam zadak do pola...
program kkk;
uses crt;
var a,b,c,aa,bb,cc:real;
begin
writeln ('Unesi varijable');
readln (aa,bb,cc);
a:=aa/5;
b:=bb/6;
c:=cc/7;
...
E sada kad izracuna ova tri broja od njih treba da ispise najmanji.
program kkk;
uses crt; <-- nema smisla u ovom programu ako ne koristiš crlscr kod begina (možda nisam u pravu)
var a,b,c,aa,bb,cc,min:longint;
begin(clrscr)
writeln ('Unesi tri broja...');
readln(aa,bb,cc);
a:=Trunc(aa/5);
b:=Trunc(bb/6);
c:=Trunc(cc/7);
min:=a;
if b < min
then min:=b;
if c < min
then min:=c;
writeln('Najmanji rezultat je ',min);
readln;
end.
Ovako bih ja to napisao, neznam jel radi sve, probaj. Oprosti na lošem indentiranju ali to nisam još naučio :P
Pozdrav ekipa!
Ako netko ima volje, zamolio bih da mi riješi dva-tri zadatka.
1. Napiši program koji će računat do kojeg datuma će trajati bon tako da unese današnji datum i trajnost bona
2. Napiši program koji učitava niz brojeva i taj niz uvećati za jedan (kao upišeš 12345, a ispiše 12346, 999 -> 1000 itd.)
3. Napiši program koji učitava niz i prihvaća ga ako ima više od 5 znakova, nema razmaka, ima barem jednu brojku, barem jedno slovo
Zahvaljujem na odgovoru!
1. Napiši program koji će računat do kojeg datuma će trajati bon tako da unese današnji datum i trajnost bona
Resenje
Program bon; const brdana:array[1..12] of integer= (31,28,31,30,31,30,31,31,30,31,30,31); function prestupna(g:integer):boolean; {Funkcija za prestupnu godinu} begin prestupna:=(g mod 4=0) and (g mod 100<>0) or (g mod 400=0); end; var d,m,g,tr:integer; dan,dd,i:integer; begin write('Unesite pocetni datum '); readln(d,m,g); write('Unesite trajnost bona u danima '); readln(tr); dan:=d+tr; repeat dd:=brdana[m]; if (m=2) and prestupna(g) then dd:=dd+1; if dan>dd then begin dan:=dan-dd; m:=m+1; if m>12 then begin m:=1; g:=g+1; end; end; until dan<=dd; writeln('Bon traje do ',dan,'.',m,'.',g); end.
2. Napiši program koji učitava niz brojeva i taj niz uvećati za jedan (kao upišeš 12345, a ispiše 12346, 999 -> 1000 itd.)
Resenje
Program nizbrojeva; var s:string; i,n,c:integer; begin write('Unesite broj=>'); readln(s); c:=1;i:=length(s); while (c<>0) and(i>=1)do begin n:=(ord(s[i])-48)+c; c:=n div 10; s[i]:=chr((n mod 10)+48); i:=i-1; end; if (i=0) and(c=1) then s:='1'+s; writeln('Uvecan niz je ',s); end.
3. Napiši program koji učitava niz i prihvaća ga ako ima više od 5 znakova, nema razmaka, ima barem jednu brojku, barem jedno slovo
Resenje
Program provera; var s:string; i,brcif,brsl,brrazm,duzina:integer; prihvatase:boolean; begin write('Unesite niz '); readln(s); duzina:=0; for i:=1 to length(s) do begin if (s[i]>=#48) and(s[i]<=#57) then brcif:=brcif+1; if (Upcase(s[i])>='A') and(Upcase(s[i])<='Z') then brsl:=brsl+1; if s[i]=' ' then brrazm:=brrazm+1 else duzina:=duzina+1; end; prihvatase:=(brcif>0)and(brsl>0)and(brrazm=0)and(duzina>5); if prihvatase then writeln('Niz ',s,' se prihvata!') else writeln('Niz ',s,' se ne prihvata!'); end.
2. Napiši program koji učitava niz brojeva i taj niz uvećati za jedan (kao upišeš 12345, a ispiše 12346, 999 -> 1000 itd.)
mislim da je ovo rjesenje jednostavnije te se moze koristit cak iako ima vise od 255 brojeva u nizu
program niz;
var
a:array[1..100] of char;
x:char;
i:integer;
l:integer;
b:boolean;
begin
l:=0;
read(x);
while (x in ['0'..'9']) do
begin
inc(l);
a[l]:=x;
read(x);
end;
for i:=l downto 1 do
if a[i]<>'9' then
begin
a[i]:=succ(a[i]); {ispisuje sljedbenik po ascii tablici}
break; {izlazi iz petlje}
end
else a[i]:='0';
if a[1]='0' then write(1);
for i:=1 to l do write(a[i]);
end.
Hvala ekipa, puno ste mi pomogli