

Potrebujem pomôcť s C# - if, else
Ahoj, do školy mám spraviť program, ktorý mi vypočíta Ohmov zákon.
Mám 3 možnosti, ktoré mi vypočíta, R,U, alebo I, no vždy keď zadám hocijakú možnosť, tak mi to skočí na koniec a vypíše "Nezadal si ani jednu moznost".
Prosím, kde mám chybu?
Tu mám aj zdrojový kód:
#include <stdio.h>
#include <stdlib.h>
int main(int argc, char *argv[])
{
int R,U,I;
printf ("Vyber si co chces vypocitat (R,U,I) \n");
switch (getche ())
{
case 'R':{
printf ("Zadaj U,I\n");
scanf ("%f%D",U,I);
R=U/I;
printf ("R=%d\n\n", R);
} break;
case 'U':{
printf ("Zadaj R,I\n");
scanf ("%D%D",R,I);
U=I*R;
printf ("U=%d\n\n",U);
} break;
case 'I':{
printf ("Zadaj U,R\n");
scanf ("%D%D",U,R);
I=U/R;
printf ("I=%d\n\n",I);
} break;
default: printf("Nezadal si ani jednu moznost\n");
}
system("PAUSE");
return 0;
}
To ale není C#, jde o C.
A opravdu při spuštění zadáváš velká písmena?
Ospravedlňujem sa, som úplný začiatočník v programovaní. Áno, zadávam velké písmená.
Místo getche() zkus getchar().
A začátečník nezačátečník, měl bys vědět, jaký jazyk vlastně používáš.
Změň to takhle:
Máš v tom programovaní riadny chaos. Keď si začiatočník - tak si najprv naštuduj to, čo chceš používať a aká je syntax a kedy čo použiť...
klikni sem
int R,U,I, to je pěkná hovadina
Aj to nejako vysvetlíš? Alebo sa len vyjadruješ k niečomu, čomu nerozumieš?
vezmu merak, plochou baterku a odpor ze supliku
U=4.5V I=0.023A => R=??
(vysvetlete rozdil toho, co vam ukaze ohm-metr a co zobrazi vyse uvedeny program s INTama)
Lenže:
1. Problém, ktorý rieši autor otázky, nesúvisí s dátovými typmi.
2. Nikde nepíše, že by tam vymenil dátový typ za niečo iné, ani že za čo iné.
3. Aj keby chcel zmeniť dátový typ, tak nestačí zmeniť len tento riadok.
4. Použitý dátový typ môže byť úplne postačujúci pre takúto školskú úlohu. A aj keď zrejme nie je, tak tá "rada" je bez nejakého vysvetlenia dosť zmätočná.
mám spraviť program, ktorý mi vypočíta Ohmov zákon
1. to nic nemeni na tom, ze "int U,I,R; je pekna hovadina"
protoze v celych cislech to vetsinou neumozni zadat pozadovane hodnoty a i pokud umozni tak vetsinou neda spravny vysledek - a pritom to deklarovat jako neco pricetneho a %D zmenit na prislusnou hodnotu neda moc prace. Navic tam stejne pro nacitani int pouziva %f, takze nekde to opravit bude muset.
Podle Ohmova zakona kdyz mi pri napeti U=1V tece proud I=3A, tak odpor R rozhodne neni 0 - to by mi tekl proud nekonecny. A nekonecno je ponekud jinde nez 3A i pri hodne volnych kriteriich.
3. staci zmenit tento radek a opravit si ty parametry scanf/printf coz beztak bude muset, protoze ty nema spravne ani pro int.
4. ne, prave pro tuto ulohu vubec postacujici neni, protoze vetsinu bezne pouzivanych hodnot da vyrazne spatny vysledek a uloha neobsahuje omezeni "Pouzijte int, ackoli se pro tuto ulohu absolutne nehodi"
Mne to vysvetľovať nemusíš. Ten prvý výkrik do tmy a aj tá druhá hádanka sú autorovi otázky na dve veci, keďže mu zatiaľ nefunguje ani načítanie vstupu.
vzhledem k tomu, ze stejne bude ten program predelavat, tak neskodi vedet dopredu, kde ma dalsi chyby at nemusi tech dotazu sem psat milion. A ta hadanka (cti testcase) neni tak slozita a mel by na ni byt schopen odpovedet i bez prekladu toho programu (lepe receno chytnout se za nos a rict, aha, tohyle jsem nedomyslel, ze vstupem a/nebo vystupem by mohly byt i cisla necela, tak proto je int U,I,R; kravina, ze me to driv nenapadlo)
Je dosť možné, že takéto veci si odladí aj sám. Doteraz tu riešil iný problém.
ptal se, kde ma chybu, tech chyb tam ma vic, int R,U,I; je jedna z tech dulezitejsich
Ak tam vidíš nejaké ďalšie chyby, ktorých "tam má viac", tak mu môžeš poradiť konkrétne, nech má z toho aj nejaký úžitok. Pseudorada "int R,U,I, to je pěkná hovadina" tak nejako postráda informačnú hodnotu.
ty formaty ve scanf-printf, ale to uz jsem psal, ze je musi prepsat. I takhle by s tim mel problem (jednak %D=%ld ale uz prestava byt podporovane, je otazka, zda %ld vs. int je ta spravna velikost, druhak tam ma i %f, coz cpat do intu je opet blbost. A muze se stat, ze se to sice prelozi, ale bude to prepisovat i veci okolo (do menebytove promenne nacpu vic bytu cisla, i kdyz to navic budou treba nuly) a chovat se znacne podivne, zvlast pro nejake specialni hodnoty. Ale kdyz opravi to int R,U,I; tak by mel prepsat i tohle a tim to opravit taky. Coz uz jsem psal.)
system("PAUSE"); taky neni zcela idealni postup, i kdyz pro rychle domaci ukoly to funguje, tak by se to prilis pouzivat nemelo, rozhodne ne v necem vetsim. Viz treba diskuze tady
51841
a z ni odkazovana http://stackoverflow.com/questions/900666/system-c alls-in-c-and-their-roles-in-programming
Navic tady ten PAUSE ( a ten getche) z toho delaji celkem mozna zbytecne interaktivni vec, ktera se neda pouzit v davce, ale to je jen takovy stylisticky detail
ten default by mel vypsat, co teda clovek zadal
"zadej U,I" navadi na zadani "4.5,0.023", nebo jeste lepe cesky "4,5,0,023" kde to i po oprave na float padne kvuli te carce mezi tim, lepsi by bylo ptat se na ty dve hodnoty kazdou zvlast (obzvlaste, pokud se berou v uvahu locales, kdy podle jazyka muze byt desetinna tecka, nebo carka, tak neni vhodne hodnoty oddelovat jednou z nich). A je taky dobre uvest priklad zadani (zda chci "4.5", "4,5", "4.5V", "45x10e-1V" nebo jaky tvar) a osetrit si pricetnost vstupu (abych nedelil nulou, nemel zaporny odpor a tak podobne)
Pekne zhrnuté. Škoda, že autor otázky nám nedal vedieť, či sa so svojím problémom pohol ďalej.
Tak si tu navratovu hodnotu funkcie getche vypis.
int ch;
ch=getche();
printf ("%d\n", ch);
switch (ch)
{ ....
...
a uvidis ascii kod toho co ti ta fcia vracia a tym padom uvidis aj preco ti nefunguje ten switch-case (t.j. jaku hodnotu mas testovat)
BTW. davas tam zbytocne zatvorky { } do case vetiev, nemaju tam ziaden zmysel.