» Poradna » Programy

C - maly program???

Odpovědět  |  Zobrazit bez stromu  |  Upozornit redakci  |  nových odpovědí: 36/36
 |   |   |  [80.78.146.---]

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
 |   |   |  [194.212.22.---]

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

Souhlasím  |  Nesouhlasím  |  Odpovědět
 |   |   |  [80.78.146.---]

#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
 |   |   |  [194.212.22.---]

#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
 |   |   |  [194.212.22.---]

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

Souhlasím  |  Nesouhlasím  |  Odpovědět
 |   |   |  [80.78.146.---]

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
 |   |   |  [213.192.24.---]

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
 |   |   |  [213.192.24.---]

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
 |   |   |  [80.78.146.---]

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
 |   |   |  [213.192.24.---]

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
 |   |   |  [217.196.213.---]

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
 |   |   |  [212.86.197.---]

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

Souhlasím  |  Nesouhlasím  |  Odpovědět
 |   |   |  [212.86.197.---]

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

Souhlasím  |  Nesouhlasím  |  Odpovědět
 |   |   |  [212.86.197.---]

.. 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
 |   |   |  [212.86.197.---]

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
 |   |   |  [212.86.197.---]

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
 |   |   |  [212.86.197.---]

... 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
 |   |   |  [212.86.197.---]

.. 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
 |   |   |  [194.212.22.---]

#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
 |   |   |  [80.78.146.---]

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
 |   |   |  [194.212.22.---]

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
 |   |   |  [80.78.146.---]

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

Souhlasím  |  Nesouhlasím  |  Odpovědět
 |   |   |  [217.196.213.---]

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
 |   |   |  [194.212.22.---]

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
 |   |   |  [212.86.197.---]

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

Souhlasím  |  Nesouhlasím  |  Odpovědět
 |   |   |  [62.240.182.---]

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

Souhlasím  |  Nesouhlasím  |  Odpovědět
 |   |   |  [194.212.22.---]

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


USB-C je konektor, který by chtěl vládnout všem

USB-C je konektor, který by chtěl vládnout všem

** USB-C se tváří jako nejuniverzálnější konektor všech dob ** Pravda je to však jen z části ** Při výběru příslušenství s USB-C dobře studujte parametry

Včera | Stanislav Janů | 28

Přechod z Windows na macOS: Co vás čeká a nemine

Přechod z Windows na macOS: Co vás čeká a nemine

** 5 kroků, které vás čekají, když se rozhodnete přejít z Windows na počítač značky Apple se systémem macOS ** macOS umí přenést data z počítače s Windows ** Při přechodu si budete zvykat na nové funkce a chování systému

17.  1.  2018 | Stanislav Janů | 148


Aktuální číslo časopisu Computer

Zachraňte nefunkční Windows

Jak nakupovat a prodávat kryptoměny

Otestovali jsme konvertibilní notebooky

Velký test 14 herních myší