Křižovatka – C / C++ – Fórum – Programujte.com
 x   TIP: Přetáhni ikonu na hlavní panel pro připnutí webu

Křižovatka – C / C++ – Fórum – Programujte.comKřižovatka – C / C++ – Fórum – Programujte.com

 

Ondra
~ Anonymní uživatel
244 příspěvků
11. 6. 2019   #1
-
0
-

Ahoj, potřeboval bych pomoct s jednou prací. Zadání je: Vytvořit křižovatku, která bude mít časování 10s na hlavní i vedlejší. A ovládání tlačítka přechodu pro chodce také na hlavní a vedlejší. Tlačítko by mělo fungovat, tak že počká 2s a poté přepne na zelenou. Povedlo se mi udělat křižovatku, ale nevím, co s s tím přepínačem. Děkuji za jakoukoliv radu.


#include <iostream>
#include <unistd.h>
#include <ctime>
#include <cmath>
#define stav1 "H:zelena \t V:cervena \t PH:cervena \t PV:zelena "
#define stav2 "H:cervena \t V:zelena \t PH:zelena \t PV:cervena "
#define stav3 "H:zelena, oranzova \t V:cervena, oranzova \t PH:cervena \t PV:cervena "
#define stav4 "H:cervena, oranzova \t V:zelena, oranzova \t PH:cervena \t PV:cervena "
using namespace std;
int main()

    
float secs;
    
  
while (1){
{ cout<<stav1<<endl;
   clock_t delay = 10 * CLOCKS_PER_SEC;
   clock_t start = clock();
   while (clock() - start < delay );
   }
  { cout<<stav3<<endl;
   clock_t delay = 5 * CLOCKS_PER_SEC;    
   clock_t start = clock();
   while (clock() - start < delay );} 
   { cout<<stav2<<endl;
   clock_t delay = 10 * CLOCKS_PER_SEC;    
   clock_t start = clock();
   while (clock() - start < delay );}
    { cout<<stav4<<endl;
   clock_t delay = 5 * CLOCKS_PER_SEC;    
   clock_t start = clock();
while (clock() - start < delay );}}


return 0;
}
 

Nahlásit jako SPAM
IP: 2a00:1028:8d1b:e66a:4d00:7ac0:b2fe:559f...–
gna
~ Anonymní uživatel
1849 příspěvků
12. 6. 2019   #2
-
0
-

Nevím, jak je myšleno to ovládání. Pokud třeba z klávesnice, tak potřebuješ funkci na neblokující čtení kláves. Ve Windows na to můžeš použít _kbhit+_getch.

Pak budeš mít pro každý semafor jeho stav a jak dlouho v něm má být.

Takže jen budeš v cyklu měnit stav semaforů podle toho kolik času uplynulo a zároveň testovat vstup z klávesnice.

Nahlásit jako SPAM
IP: 213.211.51.–
MilanL+1
Grafoman
12. 6. 2019   #3
-
0
-

#1 Ondra
čau, no ten rozhodovací cyklus bude trošku složitější, otázkou jsou např prodlevy mezi přechody ze zelené na oranžovou a červenou  a v jakém odstupu na druhém tahu spustit červená-červená+oranžová-zelená, jak dlouho má svítit přechod, minimální doba zelené na silnici v případě aktivace přechodu, tedy pokud je přechod součástí křižovatky.

časování bych udělal jedno po 1s za to bych dal čtení z klávesnice, následně pak rozhodovací strom, se změnou stavů, proměnných budeš potřebovat více 2 proměnné pro stav semaforů H a V (pokud by se měnili současně bez prodlevy stačí i 1, 2x counter času pro silnice a přechody, tlačítko přechodů 1 nebo 2 záleží na použití.

jinak ty stavy jsou 4 a správně by mělo být červená - červená+oranžová - zelená - oranžová a stavy by bylo lepší mít za sebou tak jak jdou. lépe se dají odlišit páry Zelená/Červená a Oranžové 

HRUBÝ scénář:

stav0 H:Z, V:Č, PH:Z, PV:Č
stav1 H:O, V:Č+O, PH: Č, PV:Č
stav2 H:Č, V:Z, PH:Č, PV:Z
stav3 H:Č+O, V:O, PH:Č, PV:Č

v podstatě lze sjednotit přechody stavy 0 a 2 přechod = silnice, stavy 1 a 3 přechody červená

nastavit výchozí stav a čas

hlavní cyklus
. delay 1s
. vstup test z klávesnice přechod - je-li v daném směru červená nebo oranžová nastavit proměnnou/příznak daného přechodu a časP (jinak si nevšímat, bud je nebo bude zelená)
. decrement času
. příznak přechodu a červená v daném směru => decrement časP 
. čas 0 nebo (příznak přechodu a časP 0) => změna stavu
. stav = ++stav modulo 4;  - cyklické počítání stavů 0-3
. stav and 1 čas=5 jinak 10; - nastavení času
Nahlásit jako SPAM
IP: 91.139.9.–
MilanL+1
Grafoman
12. 6. 2019   #4
-
0
-

ted koukám že tam máš různé časy ty stavy s oranžovou

EDIT:

poslední 2 řádky se aplikují při té změně stavu + výstup, také by se tam pak měl nulovat ten příznak přechodu u změny daného směru na zelenou.

Nahlásit jako SPAM
IP: 91.139.9.–
Ondra
~ Anonymní uživatel
244 příspěvků
12. 6. 2019   #5
-
0
-

Děkuji všem za rady, už jsem to vyřešil. 

Nahlásit jako SPAM
IP: 37.188.131.–
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, 74 hostů

Podobná vlákna

Křižovatka — založil Pepa

Křižovatka — založil Malirka

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ý