prog. jazyk Pascal

Programovacie jazyky, rady, poradňa...
Jussi
Medium Expert
Medium Expert
Používateľov profilový obrázok
Príspevky: 118
Registrovaný: 09 aug 2008, 10:47
Bydlisko: Mečiarova vila
Kontaktovať používateľa:

prog. jazyk Pascal

Príspevok od používateľa Jussi »

ahojtee ľudia,
dostal som za úlohu také čudné príklady, ktorým nerozumiem veľmi :? takže potrebujem, aby mi niekto poradil

CYKLUS
1. Príkaz for i:= 0 to 9 do write(i); vypíše tie isté hodnoty ako príkaz
a) i:=1; while i<=10 do write(i-1);
b) i:=0; while i=9 do begin write(i); i:=i+1 end;
c) i:=-1; while i<9 do begin i:=i+1; write(i) end;

2. Ktoré tvrdenia platia pre cyklus while
a) nemusí prebehnúť ani raz
b) telo cyklu sa vykoná, ak je podmienka false
c) prebehne vždy aspoň raz
d) vyklus skončí, ak je podmienka false

3. Aké hodnoty premenných i a f vypíše nasledujúci program. Zovšeobecnite pre ľubovoľné n.
program P;
var i, f, n: integer;
begin
n:=7; f:=1; i:=1;
while i<n do
begin
i:=i+1; f:=f*i;
end;
writeln(i,f)
end;

REŤAZEC
1. Zistite, koľko znakov bude mať reťazec s po skončení tejto časti programu
s:= 'x';
for i:=1 to 10 do
s:='<=' + s + 'y' + s + '=>';

2. Zistite, čo tento program urobí s reťazcom text:
for i:=1 to length(text)-1 do
text:= text[i+1];
makaveli
King
King
Používateľov profilový obrázok
Príspevky: 1688
Registrovaný: 17 okt 2005, 20:55
Bydlisko: Brno
Kontaktovať používateľa:

Príspevok od používateľa makaveli »

CYKLUS
1.
for i:= 0 to 9 do write(i); vypise na vystup cisla 0..9
while je cyklus s podmienkou na zaciatku, ktory prebieha kym je podmienka splnena..
a) podmienka bude splnena vzdy, pretoze i je v tomto pripade konstanta a bude vypisovat 0, 0, 0, 0, ..., 0
b) nevypise nic, podmienka nie je splnena hned na zaciatku pred prvym prechodom cyklu
c) vypise 0..9, takze toto je ekvivalent k cyklu v zadani

2.
a) tvrdenie plati, vid 1b)
b) tvrdenie neplati, ked podmienka neplati, telo cyklu sa nevykona
c) tvrdenie neplati
d) tvrdenie plati

3.
vypise i=6; f=720
pre vseobecne n -> i=n-1; f=(n-1)!

REŤAZEC
1.
6139 znakov
2.
cyklus nahradi v retazci znak na mieste n znakom na mieste n+1, znak na poslednom mieste ostane nezmeneny.. pri retazci text na vstupe bude na vystupe retazec extt
Thek_SVK
Professional
Professional
Používateľov profilový obrázok
Príspevky: 1534
Registrovaný: 24 feb 2007, 21:56

Príspevok od používateľa Thek_SVK »

No aj ja poprosim o radu, dneska som len tak skusal nejake veci, a natrafil som na dva problemy...
1) Z nejakej priciny mi nejak neberie prikaz Delay
2) Chcel som aby ten program dookola vypisoval You are an idiot, az do kym nestlacim klavesu End (79) ... Avsak, on iba urobi zaciatok, tj 2x napise You are and idiot a potom caka ci sltacim End, alebo inu klavesu. Preco ?

Kód: Vybrať všetko

program idiot;
uses crt;
var x: integer;

begin
clrscr;
x:=1;
      while (x=1) do begin
      TextBackground (0);
      TextColor (White);
      Writeln ('                    You are an idiot HAHAHA                     ');
      Delay (100);
      TextBackground (7);
      TextColor (1);
      Writeln ('                    You are an idiot HAHAHA                     ');
      Delay (100);
           if readkey<>#79 then begin
           End

           Else begin
           X:=x+1;
           End
      End;
End.
chrono
VIP
VIP
Používateľov profilový obrázok
Príspevky: 7127
Registrovaný: 25 dec 2006, 15:17

Príspevok od používateľa chrono »

Čo znamená, že ti neberie príkaz delay?
Celý ten výpis musíš dať do nejakého cyklu (v tvojo prípade bude asi najvhodnejší repeat until).
Thek_SVK
Professional
Professional
Používateľov profilový obrázok
Príspevky: 1534
Registrovaný: 24 feb 2007, 21:56

Príspevok od používateľa Thek_SVK »

chrono napísal:Čo znamená, že ti neberie príkaz delay?
Celý ten výpis musíš dať do nejakého cyklu (v tvojo prípade bude asi najvhodnejší repeat until).
No proste ako keby ho preskocilo. Ziadnu casovu medzeru medzi prikazmi nenechaval...

Kód: Vybrať všetko

program lol;
uses crt,dos;
var x:integer;

begin
clrscr;
writeln ('Ahoj');
Delay (2000);
writeln ('Ty skaredy loser');
Readln
End.
Jedine co sa stane ze mi hned napise Ahoj Ty skaredy Loser... nemalo by napisat najprv Ahoj, 2 sekundy pockat a dopisat Ty skaredy loser ?



Edit:
Takze som to skusal aj cez repeat,until, ale to iste...

Kód: Vybrať všetko

program idiot;
uses crt;
var x: integer;

begin
clrscr;
x:=1;
      Repeat
      TextBackground (0);
      TextColor (White);
      Writeln ('                    You are an idiot HAHAHA                     ');
      TextBackground (7);
      TextColor (1);
      Writeln ('                    You are an idiot HAHAHA                     ');
      until readkey=#79;

End.
Avsak, ked miesto Until readkey=#79 pouzijem Until keypressed=true , tak vtedy to funguje.
Avsak ja to chcem ukoncenie toho cyklu urobit na specificky klaves...
ja to nebyl
Medium Expert
Medium Expert
Príspevky: 80
Registrovaný: 27 jún 2008, 19:46

Príspevok od používateľa ja to nebyl »

napis presne jak to chces ja ti to spravim
k tomu repeatu by som to spravil takto
a:=readkey;
until a=#97 (alebo cokolvek);
Jussi
Medium Expert
Medium Expert
Používateľov profilový obrázok
Príspevky: 118
Registrovaný: 09 aug 2008, 10:47
Bydlisko: Mečiarova vila
Kontaktovať používateľa:

Príspevok od používateľa Jussi »

dakujem veľmiii peknee makaveli 8) dufam, že to je dobre vyriešene :)
chrono
VIP
VIP
Používateľov profilový obrázok
Príspevky: 7127
Registrovaný: 25 dec 2006, 15:17

Príspevok od používateľa chrono »

Máš dobrú verziu crt knižnice? (lebo ak nie, tak je možné, že cyklus, ktorý využíva delay prebehne príliš rýchlo)
Ing. Gandalf
Expert
Expert
Príspevky: 178
Registrovaný: 02 feb 2007, 19:46

Príspevok od používateľa Ing. Gandalf »

Mne ide toto. Pisane v Lazaruse.

Kód: Vybrať všetko

program project1;

{$mode objfpc}{$H+}

uses
  {$IFDEF UNIX}{$IFDEF UseCThreads}
  cthreads,
  {$ENDIF}{$ENDIF}
  Classes, crt
  { you can add units after this };
{$IFDEF WINDOWS}{$R project1.rc}{$ENDIF}

var x: boolean;
  key: char;

begin
     x:=false;
     while(x=false) do
     begin
          TextBackground (0);
          TextColor (White);
          Writeln ('                    You are an idiot HAHAHA                     ');
          Delay(2000);
          TextBackground (7);
          TextColor (1);
          Writeln ('                    You are an idiot HAHAHA                     ');
          Delay(2000);
          if keypressed=true then
          begin
               key:=readkey;
               if key=#27 then x:=true;
          end;
     end;
     readln;
end.
Thek_SVK
Professional
Professional
Používateľov profilový obrázok
Príspevky: 1534
Registrovaný: 24 feb 2007, 21:56

Príspevok od používateľa Thek_SVK »

Super, ide to, nenapadlo ma to urobit takto, finta bola v tom urceni ci je nieco stlacene ako vidim, dikes :)

//autoeditácia príspevku ( 09 May 2009, 3:00 )
...no, takze som znova skusal dalsie veci, povodne som si chcel len vyskusat prikazy s retazcami, potom som si vyskusal case, trosku poprikladal procedury, problem nastal niekde s podmienkami...
Skuste si pozriet to vetvenie za prikazom Case, ci je tam nieco zle.
Pascalu sa to nepaci...vid kde presne na obrazku...

Kód: Vybrať všetko

program retazce;
uses crt,dos;
var x,i,f,select,strike,genI: integer;
s,d: string;
procedure farba;
begin
TextColor(select);
End;

procedure biela;
begin
TextColor(White)
End;

Procedure pocitadlo;
begin
strike:=strike+1
end;

Procedure generator;
begin;
for genI:=1 to 10 do
Sound(14000);
end;

Procedure caseProc;
begin;
Case f of
   1: select:=2;
   2: select:=9;
   3: select:=12;
   4: select:=14;
   else pocitadlo;
end;

begin
clrscr;
strike:=0;
Biela;
Writeln ('napis vetu s ktorou chces pracovat');
Readln (s);
writeln ('Od ktoreho znaku v poradi chces zacat pocitat?');
readln (x);
Writeln ('az po znak ktory je v poradi...)');
Readln (i);
Writeln ('Teraz si vyber nejaku peknu farbu');
writeln ('Zelena-stlac 1');
Writeln ('Modra-stlac 2');
Writeln ('Cervena-stlac 3');
Writeln ('Zlta-stlac 4');
Writeln ('Ak stlacis ine cisla, budes potrestany');
Readln (f);

Case f of
   1: select:=2;
   2: select:=9;
   3: select:=12;
   4: select:=14;
          else pocitadlo;
          Writeln ('Vyber si farbu, poriadne, toto je tvoj ', strike,'. "strike".Na treti budes potrestany');
               if strike=3 then begin
                   generator;
                   Writeln ('Este raz a si zabanovany');
               end;


                  else begin
                  caseProc;
                  if strike>3 then begin
                      writeln ('You are banned');
                      readln;
                      exit;
                  end;
   end;


i:=i-x;
d:=(copy(s,x,i));
Farba;
Write ('Retazec ');
NormVideo;
Biela;
Write (d);
Farba;
Write (' ktory si si zvolil, obsahuje ');
NormVideo;
Biela;
Write (Length(d));
Farba;
Write (' znakov');
readln;
end.
Prílohy
pascalerror.JPG
audiotrack
VIP
VIP
Používateľov profilový obrázok
Príspevky: 25958
Registrovaný: 09 sep 2005, 18:39
Kontaktovať používateľa:

Príspevok od používateľa audiotrack »

ten case máš úplne zle postavený (ten druhý case). Nemáš za ním end, máš tam else aj keď nevidím kde pred tým máš nejaký if..
Thek_SVK
Professional
Professional
Používateľov profilový obrázok
Príspevky: 1534
Registrovaný: 24 feb 2007, 21:56

Príspevok od používateľa Thek_SVK »

No ja uz fakt neviem kde mam teraz chybu...nejaky end tam je ale zle...

.....problem vyrieseny, chyba bola este v procedurach na zaciatku...

A mimo tohoto ma este otazku:
Ako mozem spravit nieco take, aby som sa vratil na urcitu cast algoritmu ? Jedina moznost ktora ma napada je urobit proceduru od bodu do ktoreho sa chcem vratit az do casti algorimu v ktorej prave som, ale to mi nepride ako zrovna spravne riesenie, urcite sa to da urobit nejak krajsie...
Dajme tomu ze prejde cely algoritmus az po koniec a potom by tam bol vyber - ci chcem program ukoncit, alebo ist znova od zaciatku...
piton
King
King
Používateľov profilový obrázok
Príspevky: 1902
Registrovaný: 02 aug 2005, 0:31
Bydlisko: Hnojisko

Príspevok od používateľa piton »

Thek_SVK napísal: Dajme tomu ze prejde cely algoritmus az po koniec a potom by tam bol vyber - ci chcem program ukoncit, alebo ist znova od zaciatku...
cyklus s podmienkou na konci ( repeat until )
BX
Addict
Addict
Používateľov profilový obrázok
Príspevky: 4572
Registrovaný: 10 jan 2008, 15:30

Príspevok od používateľa BX »

Ak to chces vyuzivat pri skonceni programu, tak cez repeat-until...

Ale ak to chces, ako si pisal: "aby som sa vratil na urcitu cast algoritmu?", tak si mozes pozriet prikaz goto ;)
audiotrack
VIP
VIP
Používateľov profilový obrázok
Príspevky: 25958
Registrovaný: 09 sep 2005, 18:39
Kontaktovať používateľa:

Príspevok od používateľa audiotrack »

návestia sa neodporúča používať pokiaľ to nie je nevyhnutné
BX
Addict
Addict
Používateľov profilový obrázok
Príspevky: 4572
Registrovaný: 10 jan 2008, 15:30

Príspevok od používateľa BX »

Ano ja viem, ale ked tak velmi chce :-D (uvidol som jednu z moznosti) Ved ak si bude citat o goto, tak urcite najde aj varovanie ;)
Thek_SVK
Professional
Professional
Používateľov profilový obrázok
Príspevky: 1534
Registrovaný: 24 feb 2007, 21:56

Príspevok od používateľa Thek_SVK »

Tak sa nakoniec podarilo, vsetko ide ako ma, este popridavanych par veci...k+ vam vsetkym, za pomoc doterajsiu aj do buducna :D

edit/ Inak ano, urobil som to cez Goto
Napísať odpoveď