Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.

Pomoc oko Pascal zadatka?

[es] :: Pascal / Delphi / Kylix :: Pomoc oko Pascal zadatka?

[ Pregleda: 5408 | Odgovora: 3 ] > FB > Twit

Postavi temu Odgovori

Autor

Pretraga teme: Traži
Markiranje Štampanje RSS

Emp
Podgorica

Član broj: 42014
Poruke: 54
*.crnagora.net.



Profil

icon Pomoc oko Pascal zadatka?09.04.2005. u 21:31 - pre 217 meseci
Ako moze pomoc oko sledeceg zadatka bio bih zahvalan:)

Zadatak:Napisati program koji sa standardnog ulaza ucitava prirodan broj k,a zatim u sledecih k redova rijeci engleske abecede duzine ne vece od 50 i za svaku od ucitanih rijeci provjerava da li je oblika a^n•c•b^2n•d ( n prirodan broj ili nula).Na primjer,rijeci cd,acbbd i aacbbbbd jesu datog oblika,dok aacbbbd,daacb i aaacbb nisu.
 
Odgovor na temu

IgLo
Igor Lovric
Sremski Karlovci

Član broj: 19524
Poruke: 129
*.neobee.net.

Sajt: www.unicornsoft.net


Profil

icon Re: Pomoc oko Pascal zadatka?10.04.2005. u 00:11 - pre 217 meseci
Ajde da prvo malo prokomentarisem:

1. Predpostavicu da vazi komutativnost, odnosno da je aabbccdd = abcdabcd = cadbabdc idt.
2. A elemente ne moramo posmatrati uopste jer koliko god da ih ima (ili ih uopste nema) rec je ispravna
3. C elemenata moze biti 1 i samo 1
4. D elemenata moze biti 1 i samo 1
5. B elemenata mora biti paran broj ili 0
6. u reci moze biti iskljucivo A, B, C i D elemenata
7. A=a, B=b, C=c, D=d

Ako je ovo sto sam gore predpostavio tacno, onda ce ti sledeci kod pomoci:

Code:

Program ProveraReci;

Const
     MaxReci = 100;
     MaxLen = 50;

Var
   k,
   X : Integer;

   Reci : Array [1..MaxReci] Of String;

   Duzine : Array ['A'..'D'] Of Integer;

   Ch : Char;

Function UpperCase (S : String) : String;

Var
   x : Integer;

Begin
     For X := 1 To Length (S) Do
         S [x] := UpCase (S [x]);
     UpperCase := S;
End;

Begin

     Repeat
           Write ('Koliko reci zelite da unesete (1-', MaxReci, ')? ');
           ReadLn (k);
           If (k < 1) Or (K > MaxReci) Then
              Write ('Pogresan unos ! ');
     Until (K >= 1) And (K <= MaxReci);

     For X := 1 To K Do Begin
             Repeat
                   Write ('Unesite rec pod rednim brojem ', x, ': ');
                   ReadLn (Reci [x]);
                   If Length (Reci [x]) > MaxLen Then
                      WriteLn ('Predugacka rec! Maksimalna duzina je ', MaxLen, ' znakova!')
                   Else
                       Reci [x] := UpperCase (Reci [x]);
             Until (Length (Reci [x]) <= MaxLen);
     End;

     For X := 1 To K Do Begin
         Write (x, ': Rec ', Reci [x], ' je ');
         For Ch := 'A' To 'D' Do Begin
             Duzine [Ch] := 0;
             While Pos (Ch, Reci [x]) > 0 Do Begin
                   Inc (Duzine [Ch]);
                   Delete (Reci [x], Pos (Ch, Reci [x]), 1);
             End;
         End;
         If Length (Reci [x]) > 0 Then
            WriteLn ('neispravna jer ima ilegalnih karaktera')
         Else If Duzine ['C'] <> 1 Then
            WriteLn ('neispravna jer nema 1 i samo 1 element C ')
         Else If Duzine ['D'] <> 1 Then
            WriteLn ('neispravna jer nema 1 i samo 1 element D ')
         Else If (Duzine ['B'] Mod 2) <> 0 Then
            WriteLn ('neispravna jer ima neispravan broj B elemenata')
         Else
             WriteLn ('ispravna');

     End;
     readln;
End.


Program je testiran u TP7.0, ne znam da li For petlje sa Char-ovima rade u predhodnim verzijama.
 
Odgovor na temu

noviKorisnik
Dejan Katašić
Novi Sad

Član broj: 13216
Poruke: 4533
*.dialup.neobee.net.

Sajt: www.novikorisnik.net


+5 Profil

icon Re: Pomoc oko Pascal zadatka?10.04.2005. u 03:09 - pre 217 meseci
Citat:
IgLo:
1. Predpostavicu da vazi komutativnost, odnosno da je aabbccdd = abcdabcd = cadbabdc idt.
2. A elemente ne moramo posmatrati uopste jer koliko god da ih ima (ili ih uopste nema) rec je ispravna
3. C elemenata moze biti 1 i samo 1
4. D elemenata moze biti 1 i samo 1
5. B elemenata mora biti paran broj ili 0
6. u reci moze biti iskljucivo A, B, C i D elemenata
7. A=a, B=b, C=c, D=d

Pogledaj šta kaže pravilo:
Citat:
Emp:
a^n•c•b^2n•d

Redosled je bitan. Ide n puta "a", pa tačno jedno "c", pa dva n puta "b" i na kraju dolazi jedno "d".
Dakle:
1. Kakva komutativnost? Slovo "d" je tačno jedno i nalazi se na kraju reči. Reč nije ispravna ako nema slovo "d", nije ispravna ni ako ima više od jednog, kao ni ako ima jedno koje se ne nalazi na kraju reči. Ovo poslednje isključuje komutativnost.
2. A elemente moramo posmatrati jer ukoliko ih ima, moraju se sva nalaziti na početku reči pre bilo kog drugog elementa. Bitno je koliko ima elemenata A. Taj broj je n.
3. OK, tačno jedno C, pre koga može da bude samo A, a posle mora da bude B ili D.
4. OK, tačno jedno D, i to samo na kraju reči. Pre njega je C ili B.
5. OK, B elemenata mora biti duplo više nego A, dva puta broj n. Pre B grupe elemenata mora da se nalazi C, a iza D.
 
Odgovor na temu

RnD57
Djordje Petrovic
Novi Sad

Član broj: 54969
Poruke: 31
*.nat-pool.nsad.sbb.co.yu.

ICQ: 298181189


Profil

icon Re: Pomoc oko Pascal zadatka?10.04.2005. u 04:38 - pre 217 meseci
{Nakon shto zavrshish unos, provere validnosti ulaza i sav taj fancy interface, napravi neshto ovako:}

boolean dobraRech:=true;
int n:=0;

while rech[n+1][k]='a' do n:=n+1; { naravno, unos cesh prilagoditi tako da ti se rechi pamte u matrici 50x100 dimenzija (ako je 100 max(k)) tj. char rech[50][100]. Za kraj jedne rechi u matrici koristi, recimo $ ili u posebnom nizu chuvaj broj slova svake rechi}

if rech[n+1][k]<>'c' then dobraRech:=false;
else if n>0 then
for i= 1 to 2*n do
if rech[n+1+i][k]<>'b' then dobraRech:=false;

if dobraRech then if rech[3*n+2][k]<>'d' then dobraRech:=false;

if rech[3*(n+1)][k]<>'$' then dobraRech:=false; {ako koristish $ za oznachavanje kraja rechi}
{if (3*n+2)<>duzhina[k] then dobraRech:=false; ako koristish onaj dodatni niz za duzhine}

{Ovo bi trebalo da pokrije sve shto treba, samo ne zaboravi da to stavish pod neki veliki for da ti odradi svaku rech. Mozhesh neke uslove da stavish pod jedan if, samo sa and izmedju, naravno. Bitno ti je samo da ti je onaj while na pochetku, kako bi izrachunao broj 'a'-ova, a ostale uslove mozhesh i proizvoljno da premeshtash. Npr. mozhesh provere za 'c' i 'd' da stavish odmah posle while-a pod jedan if, a pod njegovim else-om onu for petlju, kako bi u sluchaju da broj 'c'-ova ili 'd'-ova ne valja zaobishao celu for petlju}

{Izvini za eventualne greshke u sintaksi...Ne secam se najbolje pascala...8)}
random...
 
Odgovor na temu

[es] :: Pascal / Delphi / Kylix :: Pomoc oko Pascal zadatka?

[ Pregleda: 5408 | Odgovora: 3 ] > FB > Twit

Postavi temu Odgovori

Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.