Ukol – Pascal – Fórum – Programujte.com
 x   TIP: Přetáhni ikonu na hlavní panel pro připnutí webu

Ukol – Pascal – Fórum – Programujte.comUkol – Pascal – Fórum – Programujte.com

 

adelka170
Duch
3. 11. 2013   #1
-
0
-

Ahoj potrebuji napsat program, nejsem z oboru a jsem na to levá, problém je že to potřebuji:-(

předem děkuji.

Vstup programu je 8 celých čísel Ax, Ay, Bx, By, Cx, Cy, Dx, Dy představujících souřadnice čtyř bodů A, B, C, D v Euklidovské rovině. Program vytiskne odpověď TRUE, pokud úsečky AB a CD mají nějaký společný bod, nebo FALSE, pokud úsečky AB a CD nemají žádný společný bod.

př. pro hodnoty: 0 0 1 1 0 1 1 0 bude odpověď TRUE.

Nahlásit jako SPAM
IP: 195.113.149.–
ITLover
~ Anonymní uživatel
31 příspěvků
3. 11. 2013   #2
-
0
-

#1 adelka17
Tak, mohla by si sem aspoň napísať ako si uvažovala. Ak bude s niečim problém, rád poradím. 

Nahlásit jako SPAM
IP: 178.40.72.–
lukas.balaz0
Super člen
3. 11. 2013   #3
-
0
-

S čím presne máš problém: vypočítať to matematicky alebo previesť matematický výpočet do programu ?

Nahlásit jako SPAM
IP: 213.215.106.–
JoDiK
~ Anonymní uživatel
987 příspěvků
3. 11. 2013   #4
-
0
-

#3 lukas.balaz
Já myslím, že její "problém" je v dotazu dostatečně jasně vysvětlen. Nechce být z oboru, chce zůstat levá a potřebuje, aby jít ten program někdo napsal a ona ho pak mohla ve škole odevzdat a dostat zápočet nebo cojávím. Což platí i pro milovníka IT, přesně takhle uvažovala, někdo to už za ni udělejte, pro vás je to přece není žádný problém - brnkačka - za pár minut nemáte co dělat... Tak honem, makejte... zitra se to má odevzdávat...

Nahlásit jako SPAM
IP: 88.103.233.–
JoDiK
~ Anonymní uživatel
987 příspěvků
3. 11. 2013   #5
-
0
-

#1 adelka17
Nikdo se k tomu nemá, tak já ti teda těch pět minut věnuju...

program Euklid;
var 
  Ax,Ay,Bx,By,Cx,Cy,Dx,Dy : integer;
  spolecny_bod : boolean;
begin
  label vstup;
  Ax:=0;Ay:=0;Bx:=1;By:=1;Cx:=0;Cy:=1;Dx:=1;Dy:=0;
  spolecny_bod:=TRUE;
  writeln(spolecny_bod);
end.
Nahlásit jako SPAM
IP: 88.103.233.–
KIIV
~ Moderátor
+43
God of flame
3. 11. 2013   #6
-
0
-
Nahlásit jako SPAM
IP: 94.112.35.–
Program vždy dělá to co naprogramujete, ne to co chcete...
ITLover0
Newbie
4. 11. 2013   #7
-
0
-

#5 JoDiK
Presne tak :DDDD

Nahlásit jako SPAM
IP: 178.40.72.–
Honzc0
Stálý člen
4. 11. 2013   #8
-
0
-

#1 adelka17
To co píše #6 KIIV je sice pravda, ale jsou tam úskalí v programování pro dělení nulou.

Lepší je to počítat přes parametrické rovnice úseček, a sledovat, zda parametr, třeba druhé rovnice je v intervalu <0,1>.

Do programu: zavedeš proměnné a,b,t: Real;

Pak si spočítáš: a := (Cx-Ax)*(By-Ay)-(Bx-Ax)*(Cy-Ay);

                          b := (Bx-Ax)*(Dy-Cy)-(Dx-Cx)*(By-Ay);

když b=0 pak

    se neprotínají (jsou rovnoběžné)

jinak spočítáš t := a/b;

  když (t>=0) a zároveň (t<=1) pak

     se protínají

  jinak

     se neprotínají (jsou sice různoběžné, ale protínají se vně)

   

Nahlásit jako SPAM
IP: 93.181.78.–
JoDiK
~ Anonymní uživatel
987 příspěvků
4. 11. 2013   #9
-
0
-

#1 adelka17
Adélka nám zapomněla napsat, že už jí to udělal Franta z Béčka, takže se kluci snažíte marně...

Nahlásit jako SPAM
IP: 88.103.236.–
Honzc0
Stálý člen
4. 11. 2013   #10
-
0
-

#1 adelka17
Ještě malé doplnění

Do programu: zavedeš proměnné a,b,t,s,xp,yp: Real;

Pak si spočítáš: a := (Cx-Ax)*(By-Ay)-(Bx-Ax)*(Cy-Ay);

                          b := (Bx-Ax)*(Dy-Cy)-(Dx-Cx)*(By-Ay);

když b=0 pak

    se neprotínají (jsou rovnoběžné)

jinak

   t := a/b;,

   xp := Cx+(Dx-Cx)*t;
   yp := Cy+(Dy-Cy)*t;
   když (Bx-Ax)=0 pak
      s := (yp-Ay)/(By-Ay)
   jinak
      s := (xp-Ax)/(Bx-Ax);
   když (t>=0) a zároveň (t<=1) a zároveň (s>=0) a zároveň (s<=1) pak

      se protínají

   jinak

     se neprotínají (jsou sice různoběžné, ale protínají se vně)

Nahlásit jako SPAM
IP: 93.181.78.–
adelka170
Duch
4. 11. 2013   #11
-
0
-

Jé,děkuji moc. Jsem vám moc vděčná:-)

Nahlásit jako SPAM
IP: 195.113.149.–
adelka170
Duch
4. 11. 2013   #12
-
0
-

#5 JoDiK
Tobě děkuji ještě zvlášť:-)

Nahlásit jako SPAM
IP: 195.113.149.–
JoDiK
~ Anonymní uživatel
987 příspěvků
4. 11. 2013   #13
-
0
-

#12 adelka17
No jen aby ses s tím děkováním neunáhlila...

S návěštím jsem už hooodně dlouho nic nedělal, a protože jsem neměl překladač,  mám tam chybku, tady to máš opravený a pak dej vědět, jak jsi dopadla...

program Euklid;
var 
  Ax,Ay,Bx,By,Cx,Cy,Dx,Dy : integer;
  spolecny_bod : boolean;
  label vstup;
begin
  vstup:
  Ax:=0;Ay:=0;Bx:=1;By:=1;Cx:=0;Cy:=1;Dx:=1;Dy:=0;
  spolecny_bod:=TRUE;
  writeln(spolecny_bod);
end.
Nahlásit jako SPAM
IP: 88.103.233.–
adelka170
Duch
4. 11. 2013   #14
-
0
-

#13 JoDiK
Ten program není dobře, protože tam nemužu zapsat jaké koliv hodnoty, ale např. při 0 0 1 1 0 1 1 0 bude odpověď TRUE, ale tady u tohodle programu už žádné vstup. hodnoty nemůžu zadat. (jakoby když dám alt+F5) tak tam je uz nemuzu zadat.

Nahlásit jako SPAM
IP: 195.113.149.–
ITLover0
Newbie
4. 11. 2013   #15
-
0
-

#14 adelka17

Adelka, samozrejme že to nejde, pretože tam nemáš čítaciu procedúru. Je tam axplicitne (cize zadane programatorom) tvoj prípad. Ale tento príklad bol myslení skôr ako vtip. :)

Nahlásit jako SPAM
IP: 178.40.72.–
Honzc0
Stálý člen
5. 11. 2013   #16
-
0
-

#14 adelka17
Tady je jen pro kontrolu cely program

program Usecky;

{$APPTYPE CONSOLE}

uses
  SysUtils;
var i: Integer;                                                                      //definovani promenych
    Ax,Ay,Bx,By,Cx,Cy,Dx,Dy,a,b,t,s,xp,yp: Real;  
    PB: array[1..8] of Real;                                                  //pole aby se daly souradnice nacist

begin
 {trochu matematiky - usecky zadane parametricky:
  prvni usecka    x=Ax+(Bx-Ax)*s, y=Ay+(By-Ay)*s, s=<0,1>
  druha usecka   x=Cx+(Dx-Cx)*t, y=Cy+(Dy-Cy)*t, t=<0,1>
  aby se usecky protinaly uvnitr musi byt pro prusecik s,t v danem intervalu}

  WriteLn ('--------------------- Prusecik usecek -----------------------');
  WriteLn;
  Write(' Zadej x-ove a y-ove souradnice bodu A,B,C,D: '); //sem zadas hodnoty x-ovych a y-ovych
  for i := 1 to 8 do                                                                //hodnot bodu oddelenych mezerou
  begin
    Read(PB[i]);                                                                    //nacitani techto bodu
  end;
  Writeln;
  Ax := PBodu[1]; Ay := PBodu[2];                                        //prirazeni hodnot promenym Ax az Dy
  Bx := PBodu[3]; By := PBodu[4];
  Cx := PBodu[5]; Cy := PBodu[6];
  Dx := PBodu[7]; Dy := PBodu[8];
  a := (Cx-Ax)*(By-Ay)-(Bx-Ax)*(Cy-Ay);                           //vypocitani pomocnych hodnot
  b := (Bx-Ax)*(Dy-Cy)-(Dx-Cx)*(By-Ay);
  if b=0 then                                                            //podminka rovnobeznosti
    WriteLn (' False (rovnobezky)')                                      //vypsani, ze se neprotinaji (rovnobezky)
  else
  begin                                                                                 //vypocitaní parametru pro usecku CD
    t := a/b;                                                                           //kdyz se protinaji
    xp := Cx+(Dx-Cx)*t;                                                         //x-ova souradnice pruseciku
    yp := Cy+(Dy-Cy)*t;                                                        //y-ova souradnice pruseciku
    if (Bx-Ax)=0 then                                               //podminka aby se nedelilo nulou-usecka AB je "svisla"
      s := (yp-Ay)/(By-Ay)                                                    //vypocitaní parametru pro usecku AB  
    else                                                                                 
      s := (xp-Ax)/(Bx-Ax);                                                   //v pruseciku
    if (t>=0)and(t<=1)and(s>=0)and(s<=1) then    //podminka protnuti se uvnitr usecek
      WriteLn (' True')                                                           //protinaji se uvnitr
    else
      WriteLn (' False (ruznobezky-vne)');                           //protinaji se vne
  end;
  ReadLn;
  ReadLn;                                                                           //ceka na Enter a program ukonci
end.

Nahlásit jako SPAM
IP: 93.181.78.–
JoDiK
~ Anonymní uživatel
987 příspěvků
5. 11. 2013   #17
-
0
-

#16 Honzc
Šikovnej, jen mě trochu mate proč sis přidal tolik práce s tím polem, když si ho stejně nevyužil a jen ho rozdělil do samostatných proměnných? Myslím, že s tím bylo víc práce, než kdybys napsal rovnou:

  read(Ax); read(Ay);                                        
  read(Bx); read(By);
  read(Cx); read(Cy);
  read(Dx); read(Dy);
Nahlásit jako SPAM
IP: 88.103.236.–
adelka170
Duch
5. 11. 2013   #18
-
0
-

#16 Honzc
Asi jsem fakt blbá:-( ale nejde mi to :-( nechceš mi to poslat na email:-( jako soubor.. předem díky E-mail: adelka17@seznam.cz

Nahlásit jako SPAM
IP: 195.113.149.–
JoDiK
~ Anonymní uživatel
987 příspěvků
5. 11. 2013   #19
-
0
-

#18 adelka17
Tak nebuď blbá, přečti si tu chybovou zprávu, co ti překladač napsal a u všech PBodu smaž to odu a je to...

Nahlásit jako SPAM
IP: 88.103.233.–
JoDiK
~ Anonymní uživatel
987 příspěvků
5. 11. 2013   #20
-
0
-

#18 adelka17
Nebo si místo toho čtení pole zkopíruj, co jsem mu napsal já...

Nahlásit jako SPAM
IP: 88.103.233.–
JoDiK
~ Anonymní uživatel
987 příspěvků
5. 11. 2013   #21
-
0
-

#20 JoDiK
Aha, já zapomněl, ty nejsi z oboru...

No nic, tady to máš opravené, funkční...

program Usecky;

{$APPTYPE CONSOLE}

uses
  SysUtils;
var i: Integer;                                                                      //definovani promenych
    Ax,Ay,Bx,By,Cx,Cy,Dx,Dy,a,b,t,s,xp,yp: Real;  


begin
 {trochu matematiky - usecky zadane parametricky:
  prvni usecka    x=Ax+(Bx-Ax)*s, y=Ay+(By-Ay)*s, s=<0,1>
  druha usecka   x=Cx+(Dx-Cx)*t, y=Cy+(Dy-Cy)*t, t=<0,1>
  aby se usecky protinaly uvnitr musi byt pro prusecik s,t v danem intervalu}

  WriteLn ('--------------------- Prusecik usecek -----------------------');
  WriteLn;
  Write(' Zadej x-ove a y-ove souradnice bodu A,B,C,D: '); //sem zadas hodnoty x-ovych a y-ovych
read(Ax); read(Ay);                                        
  read(Bx); read(By);
  read(Cx); read(Cy);
  read(Dx); readln(Dy);
  writeln;
  a := (Cx-Ax)*(By-Ay)-(Bx-Ax)*(Cy-Ay);                           //vypocitani pomocnych hodnot
  b := (Bx-Ax)*(Dy-Cy)-(Dx-Cx)*(By-Ay);
  if b=0 then                                                            //podminka rovnobeznosti
    WriteLn (' False (rovnobezky)')                                      //vypsani, ze se neprotinaji (rovnobezky)
  else
  begin                                                                                 //vypocitaní parametru pro usecku CD
    t := a/b;                                                                           //kdyz se protinaji
    xp := Cx+(Dx-Cx)*t;                                                         //x-ova souradnice pruseciku
    yp := Cy+(Dy-Cy)*t;                                                        //y-ova souradnice pruseciku
    if (Bx-Ax)=0 then                                               //podminka aby se nedelilo nulou-usecka AB je "svisla"
      s := (yp-Ay)/(By-Ay)                                                    //vypocitaní parametru pro usecku AB  
    else                                                                                 
      s := (xp-Ax)/(Bx-Ax);                                                   //v pruseciku
    if (t>=0)and(t<=1)and(s>=0)and(s<=1) then    //podminka protnuti se uvnitr usecek
      WriteLn (' True')                                                           //protinaji se uvnitr
    else
      WriteLn (' False (ruznobezky-vne)');                           //protinaji se vne
  end;
  ReadLn;
//ceka na Enter a program ukonci
end.
Nahlásit jako SPAM
IP: 88.103.233.–
Honzc0
Stálý člen
6. 11. 2013   #22
-
0
-

#17 JoDiK
Já jsem to samozřejmě měl uděláno s tím polem (a Ax-Dy, jsem nepotřeboval)

Pouze jsem to tázající přepsal do jejích proměnných.

Nahlásit jako SPAM
IP: 93.181.78.–
Zjistit počet nových příspěvků

Přidej příspěvek

Toto téma je starší jak čtvrt roku – přidej svůj příspěvek jen tehdy, máš-li k tématu opravdu co říct!

Ano, opravdu chci reagovat → zobrazí formulář pro přidání příspěvku

×Vložení zdrojáku

×Vložení obrázku

Vložit URL obrázku Vybrat obrázek na disku
Vlož URL adresu obrázku:
Klikni a vyber obrázek z počítače:

×Vložení videa

Aktuálně jsou podporována videa ze serverů YouTube, Vimeo a Dailymotion.
×
 
Podporujeme Gravatara.
Zadej URL adresu Avatara (40 x 40 px) nebo emailovou adresu pro použití Gravatara.
Email nikam neukládáme, po získání Gravatara je zahozen.
-
Pravidla pro psaní příspěvků, používej diakritiku. ENTER pro nový odstavec, SHIFT + ENTER pro nový řádek.
Sledovat nové příspěvky (pouze pro přihlášené)
Sleduj vlákno a v případě přidání nového příspěvku o tom budeš vědět mezi prvními.
Reaguješ na příspěvek:

Uživatelé prohlížející si toto vlákno

Uživatelé on-line: 0 registrovaných, 11 hostů

Podobná vlákna

Úkol 5 — založil Jarda

Ukol — založil joskoo

Ukol — založil Filip

Úkol — založil Malirka

Úkol 5 — založil Filip

Moderátoři diskuze

 

Hostujeme u Českého hostingu       ISSN 1801-1586       ⇡ Nahoru Webtea.cz logo © 20032024 Programujte.com
Zasadilo a pěstuje Webtea.cz, šéfredaktor Lukáš Churý