Přidat otázku mezi oblíbenéZasílat nové odpovědi e-mailemVyřešeno 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;
}
Jsou zobrazeny jen nové odpovědi. Zobrazit všechny
Předmět Autor Datum
int R,U,I, to je pěkná hovadina
Jakou 12.01.2015 21:05
Jakou
Aj to nejako vysvetlíš? Alebo sa len vyjadruješ k niečomu, čomu nerozumieš?
los 12.01.2015 22:10
los
vezmu merak, plochou baterku a odpor ze supliku U=4.5V I=0.023A => R=?? (vysvetlete rozdil toho, c…
gilhad 13.01.2015 01:12
gilhad
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 v…
los 13.01.2015 06:48
los
mám spraviť program, ktorý mi vypočíta Ohmov zákon 1. to nic nemeni na tom, ze "int U,I,R; je pekna… nový
gilhad 13.01.2015 16:28
gilhad
Mne to vysvetľovať nemusíš. Ten prvý výkrik do tmy a aj tá druhá hádanka sú autorovi otázky na dve v… nový
los 13.01.2015 17:40
los
vzhledem k tomu, ze stejne bude ten program predelavat, tak neskodi vedet dopredu, kde ma dalsi chyb… nový
gilhad 13.01.2015 20:21
gilhad
Je dosť možné, že takéto veci si odladí aj sám. Doteraz tu riešil iný problém. nový
los 13.01.2015 22:06
los
ptal se, kde ma chybu, tech chyb tam ma vic, int R,U,I; je jedna z tech dulezitejsich nový
gilhad 15.01.2015 16:21
gilhad
Ak tam vidíš nejaké ďalšie chyby, ktorých "tam má viac", tak mu môžeš poradiť konkrétne, nech má z t… nový
los 15.01.2015 19:18
los
ty formaty ve scanf-printf, ale to uz jsem psal, ze je musi prepsat. I takhle by s tim mel problem (… nový
gilhad 15.01.2015 20:04
gilhad
Pekne zhrnuté. Škoda, že autor otázky nám nedal vedieť, či sa so svojím problémom pohol ďalej. poslední
los 15.01.2015 20:20
los
Tak si tu navratovu hodnotu funkcie getche vypis. int ch; ch=getche(); printf ("%d\n", ch); switch (… nový
MM.. 13.01.2015 12:22
MM..

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"

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)

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)

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.

Zpět do poradny Odpovědět na původní otázku Nahoru