PASCAL - Zadaci, resenja, problemi, izazovi...

Odštampati sve šeste datume u mesecu za period 2004-2009 (6.1.2004 do 6.12.2009.)
Kod:
var
   dan,mesec,godina,danp,dank,dant:integer;
begin
   dant:=0;
   for godina:=2004 to 2009 do
      for mesec:=1 to 12 do
         begin
            if (godina=2004) and (mesec=1) then
               danp:=6 else
               danp:=1;
            if (godina=2009) and (mesec=12) then
               dank:=6 else
               if mesec in [1,3,5,7,8,10,12] then
                  dank:=31 else
                  if mesec in [4,6,9,11] then
                     dank:=30 else
                     if godina mod 4=0 then
                        dank:=29 else
                        dank:=28;
            for dan:=danp to dank do
               inc(dant);
            if dant mod 6=0 then
               writeln(dan,'.',mesec,'.',godina);
         end;
end.


Hvala mnogo! Sad još treba shvatiti kako funkcioniše :))


P.S.Šta je inc(dant) ? tj, to nisam sretala pre, jel ima neki drugi način da se to uradi?
 
Jel mozes da mi objasnis kako rjesiti ovaj zadatak:
Unesemo ime neko (npr.Stefan) a da program ispise unazad (npr.nafetS)...
plz ako mozes,jer trazio sam po netu ali nigdje nisam nista nasao

mozes da ispises slovo po slovo od poslednjeg ka prvog

Kod:
var
   i:integer;
rec:string;
begin
   readln(rec);
   for i:=length(n) downto 1 do
      write(rec[i]);
   writeln;
end.
 
Kad koristis read, ako ucitavas brojeve onde se citaju do prvog razmaka, tako da bi u tom slucaju ulaz trebao da izgleda ovako:0 1 1 0 1 0 1 1... ne 01011101..

E sad, ako vec moraju da budu jedan za drugim, tj bez razmaka, onda moras da ucitavas znak po znak a ne broj po broj. tj a stavi da bude array of char a ne integer i onda ce biti ok. A kad poredis char neces reci npr if a[i,j]=1 negop if a[i,j]='1' i to je to.
 
Za slucaj da nekome zatreba potapanje brodova program evo kod ;)

Od sada cu i ja sto znam da pomognem :)

Kod:
uses crt;
var
  i,j,k1,k2,b,t : integer;
  a : array [1..10,1..10] of char;
  ulaz,izlaz : text;
begin
  ClrScr;
  TextColor(green);
  Assign(ulaz,'C:\brodovi.txt');
  reset(ulaz);
  Assign(izlaz,'C:\brodovio.txt');
  rewrite(izlaz);
  while not eof(ulaz) do
  begin
   for i := 1 to 10 do
    begin
     for j := 1 to 10 do
      begin
       Read(ulaz, a[i,j]);
      end;
     readln(ulaz);
    end;
  end;
  close(ulaz);
  b:= 14;
  t:= 28;
  repeat
   Write('Unesite koordinatu 1:');
   Read(k1);
   Write('Unesite koordinatu 2:');
   Read(k2);
   Writeln;
    if a[k1,k2] = '1' then
     begin
      t:= t-1;
      b:= b-1;
      Writeln('Pogodak!');
      Writeln('Broj torpeda:', t);
      Writeln('Broj brodova:', b);
      Writeln;
      a[k1,k2] := '0';
     end
      else
       begin
        t:= t-1;
        Writeln('Fula!');
        Writeln('Broj torpeda:',t);
        Writeln('Broj cijelih brodova:', b);
        Writeln;
       end;
  until (t=0) or (b=0);
  if t=0 then
   begin
    Writeln('Zao nam je, potrosili ste sva torpeda');
   end
    else
     if b=0 then
      begin
       Writeln('Cestitamo, potopili ste sve brodove');
      end;
Readln;
end.

Program radi 100% :D
 
Imam ja jedan problem :lol:

Do sad sam sve informatiku kapirao, kako tako, ucio sam sam ali od pre neki cas kako smo poceli da radimo nizove meni to uopste nije jasno. Apsolutno nista!

Kako se koriste?
Za probleme kakvog tipa se koriste?
Kako se to u programima ispoljava?

.... bem li ga sta jos, ama bas nista, pa ako moze neko dami objasni da mogu da pocnem da vezbam zadatke...

hvala
 
aj prvo ovako:

primeri deklarisanja:
var
brojevi:array[1..100] of integer;
znaci:array[1..100] of char;
matrica:array[5..10,'a'..'z'] of boolean;
trodimenzionalni:array[1..10,'a'..'t',30..45] of char;

pristupanje poljima:
brojevi[4]:=10;
if znaci='g' then ...
matrica[3,'g']:=false;
for i:=1 to 10 do
trodimenzionalni[i,'d',35]:=i+1;

e sad, za cega sluze, hmm. U programiranju su neophodni, to je sigurno, ali u skoli se neces baviti nikakvim ozbiljnim problemima vec samo npr zadacima ispisi ovo, izracunaj ono itd. Recimo da zelis da korisnik unese brojeve a ti mu ih ispises sortirane, tu ti je neophodan niz, i njime se to vrlo lako rezlizuje. String je tip podataka koji je u stvari deklarisan kao array[1..256] of char. Itd, itd.

Recimo, vidis ovde gore, trebalo je nekako sacuvati podatke o polozaju brodova u igrici potapanje brodova a za to je korisna matrica. Matrica je inace niz nizova, tj, mozes je zamisliti kao tabelu. Dakle matrica je dvodimenzionalni niz. Mogu postojati i trodimenzionalni, a i vise dimnezionalni nizovi, samo sto je njih teze nekako zamisliti a i redje su potrebni.

Korisna stvar kod niza je sto se promenljivoj pristupa samo pomocu imena niza i indeksa u njemu, pa je pogodan za obradjivanje u petljama. npr
for i:=a to b do
niz:=nesto;

Takodje, nekom sam gore pisao primer za loto izvlacenje sa random funkcijom. U nizu mozes npr da pamtis koji su sve brojevi izvuceni, ili koji su ostali, i to na vise nacina. Npr jedan nacin sam ja koristio kad sam napravio niz izvucen[1...39] of boolean pa ako je izvucen true onda je taj broj vec izvucen a ako je false, onda nije. Drugi nacin bi bio da imas niz brojeva koji su ostali pa iz njega izbacujes one koje izvuces.

Ima mnogo primena, i svakako su neopshodni. Najbolje ti nadji neki od zadataka koje treba da vezbas pa cu ti na njemu objasniti kako da ga resis pomocu nizova.
 
E brate :) samo da pitam... nesto abecedni red nece
Kod sam napisao ovako ofrlje znaci sad : da cita iz datoteke i da sortira po abecednom
prijavljuje type missmatch kod stringa kod

Kod:
Ovaj dio :

for i := 1 to 3-1 do
 for j := i+1 to 3 do
  begin
    if a[i] > a[j] then
     begin
      s:= a[i];
      a[i] := a[j];
      a[j] := s; (*Ovdje prijavljuje Gresku, s je oznacen kao string u var*)
     end;
  end;

Iz glave sam napisao kod
 
odlična tema... bravo za kreatora...
a takođe bravo za sve ljude koji rade zadatke i pomažu drugima...

ja sam takođe puno naučio o paskalu delom i iz ove teme....
evo nekih zadataka, naravno urađenih, sa odgovarajućim algoritmom...:

Kod:
http://www.megaupload.com/?d=HG32V62W

nadam se da sam pomogao bar malo podelivši znanje sa vama...
zzz
 
Poslednja izmena:
Imam ja jedan problem :lol:

Do sad sam sve informatiku kapirao, kako tako, ucio sam sam ali od pre neki cas kako smo poceli da radimo nizove meni to uopste nije jasno. Apsolutno nista!

Kako se koriste?
Za probleme kakvog tipa se koriste?
Kako se to u programima ispoljava?

.... bem li ga sta jos, ama bas nista, pa ako moze neko dami objasni da mogu da pocnem da vezbam zadatke...

hvala

evo ti još malo o nizovima, mada je Nemanja prilično dobro objasnio...
Kod:
http://www.megaupload.com/?d=JCJ0C2DP
 
Imam problem...pokusao sam da programiram program za sortiranje... Imam datoteku ulaz.txt u kojoj se nalaze 4 podatka, ime, br, br, br. Program treba da sabere ta tri broja iz te datoteke i da poredja ime, zbir u neki redosled(opadajuci)... E sad...tu treba koristiti slogove i datoteke a ja slabo stojim sa tim... Kao izlaz treba da bude sortirana datoteka...
Ovo je samo pocetak i mislim da nista ne valja.

Kod:
program sortira;
  type sortiranje=record
    ime:string;
    brb:integer;
  end;
  var ul,izl:text;
      sort:sortiranje;
      i,s:integer;

  begin
  assign(ul,'ulaz.txt');
  reset(ul);
  while not eof do
    begin
      while not eoln do
        begin
          read(ul,sort.ime);
          for i:= 1 to 3 do
            begin
              read(ul,sort.brb);
              s:=s+sort.brb;
            end;
        end;
    end;

Ako moze neko da mi pomogne...bio bih mu zahvalan, Hvala

Ulaz.txt izgleda ovako
Kod:
m.m.l. 10 10 15
nes 10 10 10
ezzy 5 5 10
duka511 20 20 20
 
Ako jeste tako evo ti resenje. Ako nije kazi da prepravim.

Kod:
program suma;
 uses crt;

 var
    x,i:integer;
    n:byte;
    s:real;



 function fact(broj:byte):integer;
  var
     i:byte;
     f:integer;

  begin
   if (broj=0) then fact:=1
    else

    begin
     f:=1;

     for i:=1 to broj do
      begin
       f:=f*i;
      end;
     fact:=f;
    end;

  end;

 function stepen(broj:integer; st:byte):integer;
  var
     i:byte;
     rez:integer;

   begin
    rez:=1;

     for i:=1 to st do
      begin
       rez:=rez*broj;
      end;
    stepen:=rez;
   end;


 BEGIN
  clrscr;

  s:=1;
  i:=0;

  write('X=');
  readln(x);

  write('N=');
  readln(n);

  for i:=1 to n do
   begin
    s:=s+(stepen(x,i)/fact(i));
   end;

  writeln(s:3:2);
  readln;
 END.
 
Poslednja izmena:
Ja mislim da je drugacije. Da se umesto for petlje od 1 do n treba ici od 1 dok taj clan x^n/n! ne postane manji od zadatog broja. Takodje, prilicno je neefikasno tako racunati stepen i faktorijel u ovakvom zadatku.

Kod:
program suma;

var
   x,min,step,suma:real;
   n,fakt:integer;

begin
   write('Unesite x: ');
   readln(x);
   write('Unesite minimalnu vrednost clana: ');
   readln(min);
   n:=0;
   step:=1;
   fakt:=1;
   suma:=0;
   while step/fakt>=min do
      suma:=suma+step/fakt;
      inc(n);
      step:=step*x;
      fakt:=fakt*n;
   end;
   writeln('Trazena suma je: ',suma:0:5);
end.
 
@MML

Read(string) cita do kraja linije tako da eoln gubi smisao u tom slucaju. Takodje, ono ucitavanje brojeva posle toga onda vise nema smisla, a cak i da ima, opet je eoln nepotreban jer znas da ce do kraja biti tacno 3 podatka.. Osim toga, ne mozes imati nikako samo jednu promenljivu za ovakav zadatak vec niz ili listu jer se kod tebe sve promenljive ucitavaju jedne preko drugih. I trebao bi da inicijalizujes pocetnu vrednost sume na 0. Osim toga, eof i eoln bez parametara se odnose na ucitavanje sa tastature a sa parametrom na ucitavanje iz fajla.

Kod:
program sortiranje;

type
   ljudi=record
            ime:string;
            broj:integer;
         end;

var
   ul,iz:text;
   n,i,j,b1,b2,b3:integer;
   t:ljudi;
   osoba:array[1..100] of ljudi;

begin
   assign(ul,'ulaz.txt');
   reset(ul);
   n:=0;
   while not eof(ul) do
      inc(n);
      osoba[n].ime:='';
      read(ul,slovo);
      while slovo<>' ' do
         osoba[n].ime:=osoba[n].ime+slovo;
         read(ul,slovo);
      end;
      readln(f,b1,b2,b3);
      osoba[n].broj:=b1+b2+b3;
   end;
   close(ul);
   for i:=1 to n-1 do
      for j:=i+1 to n do
         if osoba[i].broj>osoba[j].broj then
            begin
               t:=osoba[i];
               osoba[i]:=osoba[j];
               osoba[j]:=t;
            end;
   assign(iz,'izlaz.txt');
   rewrite(izlaz);
   for i:=1 to n do
      writeln(osoba[i].ime,' ',osoba[i].broj);
   close(iz);
end.

Sto se sortiranja tice, moze brze da se odradi, ai mislim da je ovo sasvim ok da bi lakse razumeo. Takodje, nije problem sortirati ni po imenu a ne po broju ili po opadajucem a ne po rastucem redosledu, zavisi sta ti treba. Oko ucitavanja imena, mora tako jer bi sa read(string) ucitao do kraja reda ukljucujuci tu i ona 3 broja pa bi onda morao da izdvajas te brojeve iz tog stringa sto je komplikovanije. Lakse bi bilo kad bi ulaz bio obrnut, tj prvo brojevi pa onda ime.
 

Back
Top