Nekonečná smyčka – C / C++ – Fórum – Programujte.com
 x   TIP: Přetáhni ikonu na hlavní panel pro připnutí webu

Nekonečná smyčka – C / C++ – Fórum – Programujte.comNekonečná smyčka – C / C++ – Fórum – Programujte.com

 

miguel0
Newbie
5. 4. 2007   #1
-
0
-

můžete mi prosím někdo vysvětlit,jak pracuje nekonečná smyčka a za jakých podmínek ji lze opustit.Já jedu podle publikace c++ za 21 dní,konkrétně str.167,výpis 7.17
co by se stalo,kdybych úplně vypustil řádek 14?
řádek 40 if(konec) tady nemusí být rovnost nebo nerovnost,s čím se konec porovnává???

a je problém nekonečné smyčky někde lépe vysvětlen???Díky

Nahlásit jako SPAM
IP: ...–
midin
~ Anonymní uživatel
320 příspěvků
5. 4. 2007   #2
-
0
-

Nekonečná smyčka opakuje celý cyklus do nekonečna, jinak se to snad vysvětlovat nedá. Pokud by chyběla nějáká kontrolní proměnná (v tvém zdrojáku je to bool konec) a nenastavila by se poté na požadovanou hodnotu pro ukončení smyčky, tak by se smyčka opakovala donekonečna a nebylo by možné jí zastavit (kromě vypnutí programu). Výraz

if(konec)
znamená, že pokud je proměnná konec rovna true provede se blok příkazů po if.

Nahlásit jako SPAM
IP: ...–
miguel0
Newbie
5. 4. 2007   #3
-
0
-

a není to spíš naopak - dokud je hodnota konec rovna false,bude se smyčka provádět stále?A proměnná může mít charakter bool,já myslel že pouze výraz?A navíc zde píšou,že na řádku 40 se vyhodnotí proměnná konec if(konec) ale tady se přece nic navyhodnocuje!!!!!!

Nahlásit jako SPAM
IP: ...–
DeaLer+2
Hero
5. 4. 2007   #4
-
0
-

To miguel: máš v tom docela bordel, ta proměnná se samozřejmě vyhodnocuje - pokud je true, cyklus končí a pokud je false, cyklus běží dál

Nahlásit jako SPAM
IP: ...–
Dušan Janošík | web: djanosik.cz, @djanosik
Martin0
Návštěvník
5. 4. 2007   #5
-
0
-

a není to spíš naopak - dokud je hodnota konec rovna false,bude se smyčka provádět stále?


tak to zalezi na podmince uvedene u toho cyklu (predpokladam u while(...)).

A proměnná může mít charakter bool,já myslel že pouze výraz?


promenna muze mit charakter i integer -- 0 znamena false a cokoli nenuloveho je true.. lze tedy psat i if(1) coz je stejne jako if(true).

A navíc zde píšou,že na řádku 40 se vyhodnotí proměnná konec if(konec) ale tady se přece nic navyhodnocuje!!!!!!


Samotna promenna je v podstate taky vyraz -- vyhodnoti se tak, ze se zkontroluje hodnota promenne.

Nahlásit jako SPAM
IP: ...–
Peter D.0
Expert
5. 4. 2007   #6
-
0
-

while(1)

{
if (konec)
break;
}

Nahlásit jako SPAM
IP: ...–
Program nemusi fungovat rychle, staci ze funguje dostatecne rychle.
midin
~ Anonymní uživatel
320 příspěvků
5. 4. 2007   #7
-
0
-

To miguel:

if(konec)
je úplně to samé jako
if(konec==true)
popř. jako
if(konec!=0)

Nahlásit jako SPAM
IP: ...–
miguel0
Newbie
6. 4. 2007   #8
-
0
-

#include <iostream>

int nabidka();//prototyp fce,nepřijímá argumenty,vrací hodnotu int
void ProvedUkolJedna();//prototyp fce,nepříjímá argumenty,nevrací žádnou hodnotu
void ProvedUkoly(int);//prototyp fce,přijímá argumenty int,nevrací žádnou hodnotu

using namespace std;

int main()
{
int volba=nabidka();
while(volba!=5)
{
switch(volba)
{
case 1:ProvedUkolJedna();
break;
case 2:ProvedUkoly(2);
break;
case 3:ProvedUkoly(3);
break;
case 4:
break;
case 5:
cout<<"tohle bude asi konec";
break;
default:
cout<<"Prosim,vyberte znovu";
break;
}
if(volba==5)
break;
}

cin.get();
cin.get();

return 0;
}

int nabidka()
{
int volba;

cout<<"*******Nabidka*******\n";
cout<<"(1) Volba jedna\n";
cout<<"(2) Volba dva\n";
cout<<"(3) Volba tri\n";
cout<<"(4) Znovuzobrazeni nabidky\n";
cout<<"(5) Konec\n\n";

cout<<"volba: ";
cin>>volba;

return volba;
}

void ProvedUkolJedna()
{
cout <<"Provedl jsem ukol jedna";
}
void ProvedUkoly(int volba)
{
if(volba==2)
cout<<"Provedl jsem volbu 2...\n";
else
cout<<"Provedl jsem volbu 3....\n";
}


Já jsem si tady zkusil vytvořit alternativní smyčku,ale pořád se mi to seká,nevím,v čem je chyba,potřebuji,aby mi nabídka vyběhla vždy znovu.Díky

Nahlásit jako SPAM
IP: ...–
Martin0
Návštěvník
6. 4. 2007   #9
-
0
-

To miguel: jestli jsem to dobre pochopil, tak musis nekde (nejspis nakonci while cyklu) znovu volat volba=nabidka();, aby Ti vybehla nabidka.. Navic posledni dva radky toho while cyklu jsou tam zbytecne... Bych to zkusil takto:

    do

{
int volba=nabidka();
switch(volba)
{
case 1:ProvedUkolJedna(); break;
case 2:ProvedUkoly(2); break;
case 3:ProvedUkoly(3); break;
case 4: break;
case 5: cout<<"tohle bude asi konec"; break;
default: cout<<"Prosim,vyberte znovu"; break;
}
} while(volba!=5)

Nahlásit jako SPAM
IP: ...–
Dodiq0
Newbie
7. 4. 2007   #10
-
0
-

Iba tak okrajovo,
...
case 4:
break;
! case 5:
cout<<"tohle bude asi konec";
break;! // myslím, že toto tu mať nemusíš..nikdy sa to nepoužije.To v tých výkričníkoch.

...

Nahlásit jako SPAM
IP: ...–
Beginner
10. 4. 2007   #11
-
0
-

tiez tak akrajovo -> da sa to aj s cyklom for :



for (;;)
{
vykonaj_prikazy();
}
ale uz je len na programatorovi aby ten cyklus aj naozaj niekedy skoncil pomocou prikazu break

Nahlásit jako SPAM
IP: ...–
Múdry nie je ten, čo veľa vie, ale ten, kto vie, čo je treba. (Thomas Alva Edison)
neimenuje0
Návštěvník
11. 4. 2007   #12
-
0
-

Nejlepší je while (true) ... a opouštěj breakem ;)

Nahlásit jako SPAM
IP: ...–
Ghekon0
Návštěvník
12. 4. 2007   #13
-
0
-

Nechci se hádat, ale podle mne je nejlepší forever:

for (EVER)
{
...
...
break;
}

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

Podobná vlákna

Nekonecna smycka — založil papen

Reklamace: Nekonečná smyčka — založil Anonymní uživatel

Nekonecna velkost — založil Tayson

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ý