» Poradna » Programy

C - maly program???

 |   | 

Napisu sem zadani programu. Principialne vim jak ho vyresit, ale stale mi to hlasi nejake chybi, tak mi skuste napsat vasi verzi. Prosim pomoci cyklu while... diky moc...

Napiste program, ktery bude opakovane prepocitavat stupne na radiany PI*(stupne/180). Po prepoctu program vypise dotaz, zda-li ma program skoncit - pri zadani maleho nebo velkeho pismena "a" se program ukonci.

Odpovědi na otázku

 |   | 

Promin, ale opravdu chces, aby tu ostatni za tebe resili domaci ukoly ?
Napis sem sve reseni, pomuzeme ti najit chybu.

Souhlasím  |  Nesouhlasím  |  Odpovědět
 |   | 

A to se Roger tolik snazil aby zamaskoval klasicke "Udelejte za me domaci ukol"

Souhlasím  |  Nesouhlasím  |  Odpovědět
 |   | 

#include

#define PI 3.14159

int main(void)
{
double Prevod, Stupne;
int End = 'M';


while (End != ('A')||('a')) {
printf("Zadej stupne: ");
scanf("%lf", &Stupne);
Prevod = PI*(Stupne/180);
printf("Vysledek je: %lf", Prevod);
printf("Pro ukonceni programu stisknete A nebo a\n");
scanf("%c", &End);
}




return 0;
}

Souhlasím  |  Nesouhlasím  |  Odpovědět
 |   | 

Nevim, ale myslis, ze deklarace:
int End = 'M'
je v poradku ?

Souhlasím  |  Nesouhlasím  |  Odpovědět
 |   | 

#include

a misto 180 dej 180.0

IMHO deklarace je ok, char se stejne prevadi na int (nebo sem si neceho nevsimnul?)

Souhlasím  |  Nesouhlasím  |  Odpovědět
 |   | 

aha :) stdio.h nevezme redakcni system :) jinak zkus taky poslat ty chybove hlasky...

Souhlasím  |  Nesouhlasím  |  Odpovědět
 |   | 

Zadnou hlasku to nehazi, ale fukncnost programu je naprd. Vysstup je nasledovny:

Zadejte stupne: 45
Vysledek je: 0.785397Pro ukonceni programu stisknete A nebo a
Zadej stupne

Program nereaguje na zadani maleho nebo velkeho "a", a jak vidite tak program hned vyziva Zadej stupne, i kdy jsem jeste nic nezmackl...

Souhlasím  |  Nesouhlasím  |  Odpovědět
 |   | 

A on by mel napred cekat na zadani pismene ?
Jak to ma udelat, kdyz zadani pismene mas az za zadanim stupnu a vypoctem ?

Souhlasím  |  Nesouhlasím  |  Odpovědět
 |   | 

Co se tyce vysledku, za %lf dej hned \n, to zalomi radek.

Co se tyce nefunkcniho scanf na konci, zkus dat pred nej fflush(stdout);

Souhlasím  |  Nesouhlasím  |  Odpovědět
 |   | 

No, je to pravda, ale kdyz teda C ma typ 'char', byl by asi lepsim kandidatem... Jinak abych rekl pravdu, taky tam krome toho 180 nevidim nic spatnyho.

Souhlasím  |  Nesouhlasím  |  Odpovědět
 |   | 

No ja prave take ne. I kdyz tam dam datovy typ char, tak to nefunguje.
Tak jeste jednou: Program na nacist z klavesnice STUPNE a prevest je na RADIANY. Az se to provede, vysledek se vypise na obrazovku. Az pote se program zepta!!!, zda chceme program ukoncit (pomoci klavesy A nebo a), pokud ne, zmackneme neco jineho a program pokracuje, tzn. vrati se na zacatek cyklu!!!

Osobne si myslim, ze jsem udelal chybu v tom podminemen vyrazu while (End != ('A')||('a')), protoze kdyz vse skousim treba testu na 1, tak vse funguje... Ale na znakove konstanty mi program nereaguje...

Souhlasím  |  Nesouhlasím  |  Odpovědět
 |   | 

jeste zkus nahradit scanf("%c", &End) volanim End = getchar();

Striktne vzato je scanf() na formatovany vstup, na nacteni jednoho znaku je lepsi getch() nebo getchar().

Souhlasím  |  Nesouhlasím  |  Odpovědět
 |   | 

myslíš že ten tvůj původní výraz je správně?

while (End != ('A')||('a'))

tohle přece znamená pokud End není roven 'A' nebo není roven 'a' tak pokračuj... takže by měl pokračovat neustále, protože pokud zadáš třeba 'A' tak není roven 'a' a tedy logický součet 0+1 = 1 je pravdivý a jede se dál.

Asi bys to měl nahradit

while((End!='A')&&(End!='a'))

a třeba to pomůže

Souhlasím  |  Nesouhlasím  |  Odpovědět
 |   | 

Tak tos napsal pěknou kravinu !

Souhlasím  |  Nesouhlasím  |  Odpovědět
 |   | 

Ten test ma byt spravne
while(End!='A' && End!='a')

Souhlasím  |  Nesouhlasím  |  Odpovědět
 |   | 

... takze kravinu si napisal ty, squadleader. Napisal to spravne.

Souhlasím  |  Nesouhlasím  |  Odpovědět
 |   | 

.. teda kravinu napisal mozno aj on, ak sa nemylim tak != ma prednost pred ||, takze IMHO to while(End!='A'||'a') by znamenalo while( (End!='A') || (True) ), True lebo 'a' je nenulova hodnota, a vysledok toho vyrazu je vzdy True.

Souhlasím  |  Nesouhlasím  |  Odpovědět
 |   | 

Říká se tomu tak, že podmínka je vždy platná.
On napsal: pokračuj pokud: je obsah roven A nebo a
Což napsals poněkud krkolomně, ale pak sis to uvědomil.
Program by v takovém případě nemohl být ukončen, protože nelze stlačit zaráz a a A.
Takováto podmínka se v praxi používá například pro aktivování kontextové nabídky ALT+něco.

Souhlasím  |  Nesouhlasím  |  Odpovědět
 |   | 

Tak to jsem psal z paměti. Chyba. Ukonči pokud A a zároveň A

Souhlasím  |  Nesouhlasím  |  Odpovědět
 |   | 

No prave ze nie, operacia != ma prednost pred operaciou ||, (http://www.difranco.net/cop2220/op-prec.htm), takze ten vyraz je:
((End!='A') || ('a'))
|| je bool operacia ktora ma bool opernady, bool operand je pravdivy ak je nenulovy, takze ten vyraz NEznamena ze ukoncit ak 'A' a zaroven 'a', ten vyraz znamena:
((End!='A') || (TRUE))
t.j. opakuj ak End!='A', alebo "vzdy" (=TRUE), = opakuj vzdy.

Souhlasím  |  Nesouhlasím  |  Odpovědět
 |   | 

Dobře. Tak už si uvědom , že tam máte (na začátku) oba blbě operátory && což jste časem opravili.

Souhlasím  |  Nesouhlasím  |  Odpovědět
 |   | 

Oh my god, ved v SPRAVNOM vyraze musi byt operator &&, opakuj ak
End!='A' && End!='a'
T.j. bude to opakovat ak End nie je 'A' A SUCASNE End nie je 'a'

Souhlasím  |  Nesouhlasím  |  Odpovědět
 |   | 

... blby operator je prave operator || a cely cas tu diskutujem o tom ze preco je ten operator blby, a este aj blbo pouzity.

Souhlasím  |  Nesouhlasím  |  Odpovědět
 |   | 

.. ak by si to stale nechapal, v tom prispevku su napisane dve veci:
a) spravne ma byt ten while cyklus takto:
while(End!='A' && End!='a')
tak to je a nic sme si neopravovali.
b) vyraz
while(End!='A' || 'a') je nespravne, a cely cas som tu pisal len o tom ze PRECO je to nespravne, ptz. to co si pisal aj ty aj on nie je pravda (to vysvetlenie preco je ten vyraz nespravny). Ten vyraz je vzdy true preto ze je tam (nieco || TRUE) = TRUE, that's all.

Souhlasím  |  Nesouhlasím  |  Odpovědět
 |   | 

#include

#define PI 3.14159

int main(void)
{
double Prevod, Stupne;
int c;

do{
printf("Zadej stupne: ");
scanf("%lf", &Stupne);
Prevod = PI*(Stupne/180.0);
printf("Vysledek je: %lf\n", Prevod);
printf("Pro ukonceni programu stisknete A nebo a\n");
while(getchar() != '\n');//timhle se zbavime '\n' v bufferu
}while((c = getchar()) != 'a' && c != 'A');




return 0;
}

Doufam ze neva ze to je do while cyklus :)

Souhlasím  |  Nesouhlasím  |  Odpovědět
 |   | 

Tak fajn... diky... kdyby jeste nekdo opravil ten muj kod, urcite to bude v tom cyklu while... byl bych rad... treba na neco prijdete...

Souhlasím  |  Nesouhlasím  |  Odpovědět
 |   | 

End != ('A')||('a'))
znamena, ze znak je ruzny od ('A' nebo 'a')
Ale ruzny bude vzdy, protoze at stisknes male nebo velke 'a', bude to vzdy splneno

Souhlasím  |  Nesouhlasím  |  Odpovědět
 |   | 

pres while prosim takto:
#include

#define PI 3.14159

int main(void)
{
double Prevod, Stupne;
int End = 'M';

while (End != 'A' && End != 'a') {
printf("Zadej stupne: ");
scanf("%lf", &Stupne);
Prevod = PI*(Stupne/180.0);
printf("Vysledek je: %lf\n", Prevod);
while(getchar() != '\n');
printf("Pro ukonceni programu stisknete A nebo a\n");
scanf("%c", &End);
}




return 0;
}

Souhlasím  |  Nesouhlasím  |  Odpovědět
 |   | 

Fajnovy... Diky moc HUNTE!!! Uzaviram tuto diskusi... mejte se tu dobre... diky...

Souhlasím  |  Nesouhlasím  |  Odpovědět
 |   | 

tak vidím že hunt mě asi o 7 minut předběhl se změnou toho podmíněného výrazu uvnitř while

Souhlasím  |  Nesouhlasím  |  Odpovědět
 |   | 

Takto se ale nic nenauci
Proc ho jen nepopostrcite, aby se musel taky trochu snazit sam ?

Souhlasím  |  Nesouhlasím  |  Odpovědět
 |   | 

Vzdyt to reseni mel skoro cele dobre, az na tu 180, kde zapomnel dopsat .0, aby se to bralo jako float (nebo double nebo jak to tam mel) a az na tu logickou podminku, kterou jste mu vysvetlil Vy. Samozrejme na dotazy "Udelejte za me DU" jsem take alergicky, ale tohle podle me takovy pripad nebyl... Preji pekny den

Souhlasím  |  Nesouhlasím  |  Odpovědět
 |   | 

To nie je nutne, ptz. prvy parameter je uz double, ostatne sa automaticky konvertuju na double.

Souhlasím  |  Nesouhlasím  |  Odpovědět
 |   | 

Máte to všichni špatně, pořadí operací musí být (PI/180)*stupně vy Ynteligenti

Souhlasím  |  Nesouhlasím  |  Odpovědět
 |   | 

ROFL

Souhlasím  |  Nesouhlasím  |  Odpovědět
 |   | 

Zkus se prosim sve pani ucitelny na prvnim stupni zakladni skoly zeptat na zamenu poradi matematickych operaci pri nasobeni a deleni.

Souhlasím  |  Nesouhlasím  |  Odpovědět

Související témata: Roger, Maly




Určitě si přečtěte

Nový iPhone a další novinky Applu: sledujte, na co se zase budou stát fronty

Nový iPhone a další novinky Applu: sledujte, na co se zase budou stát fronty

** Apple dnes představuje nové produkty v čele s novými iPhony ** Nemusí zůstat jen u telefonů, čekají se i další novinky ** Úvodní přednáška začíná v 19:00 našeho času

David Polesný | 57

Portál občana už funguje. Na státní web vypadá až překvapivě použitelně

Portál občana už funguje. Na státní web vypadá až překvapivě použitelně

** Portál občana už funguje, vyřídíte na něm první požadavky ** Funkce se budou postupně rozšiřovat ** Web je docela moderní a přehledný

David Polesný | 66

Vylaďte si Wi-Fi: Podívejte se, jaká pásma máte doma volná a kam signál nedosáhne

Vylaďte si Wi-Fi: Podívejte se, jaká pásma máte doma volná a kam signál nedosáhne

** Prozkoumejte, jaké pásmo je pro vaši síť nejlepší ** Díky heat mapě snadno poznáte, kde to bude se signálem horší ** Vše zvládnete i z mobilního telefonu

Vladislav Kluska | 36

Osudová havárie Concordu: Před 18 lety přišel konec nadzvukových dopravních letadel

Osudová havárie Concordu: Před 18 lety přišel konec nadzvukových dopravních letadel

** Concorde byl nejrychlejším dopravním letadlem ** Atlantik dokázal přeletět za cca 3 až 3,5 hodiny ** Před osmnácti lety tragická havárie provoz těchto letadel prakticky ukončila

David Polesný, Jiří Černý | 37

Jak funguje největší akumulátor v Česku: podívejte se do elektrárny Dlouhé Stráně

Jak funguje největší akumulátor v Česku: podívejte se do elektrárny Dlouhé Stráně

** Přečerpávací vodní elektrárna Dlouhé stráně je obdivuhodné technické dílo ** Stejná turbína vyrábí elektřinu i tlačí vodu zpět do horního jezera ** Strojovna elektrárny je zabudována v podzemí

David Polesný | 35

V doupěti hackerů na brněnské FIT: Ukázali nám útoky na Bluetooth i vlastní chytré krabičky

V doupěti hackerů na brněnské FIT: Ukázali nám útoky na Bluetooth i vlastní chytré krabičky

** Internet je plný malwaru, to už dnes ví každý ** Víte ale, že lze útočit třeba i na Bluetooth? ** Navštívil jsem hackery z brněnského FITu

Jakub Čížek | 1


Aktuální číslo časopisu Computer

Jak vytvořit a spravovat vlastní web

Velký test herních klávesnic a DVB-T2 tunerů

Vše o formátu RAW

Vybíráme nejlepší základní desku