IT NEWS PC REVUE PC FORUM FreeBSDInternet time: @935
Obsah fóra
Pravidlá  •  Kontakt  •  Prihlásenie  •  Registrácia

Westend Tower

Kancelárie pre malých i veľkých - prenájom už od 9,50 €/m2/mesačne. www.westendtower.sk

Chcete darček pre svoje dieťa

Odpovedzte na otázky a vyhrajte! LEGO duplo 2 krát deňne do konca mesiaca www.duplo.lego.com

PZP za 69 € na celý rok

Vonku môžete denne naraziť do 2 mil. áut Vám ale stačí PZP Union len za 69 € /rok www.union.sk

Dala som si poradiť

O moje peniaze je postarané. A o vaše? www.partnersgroup.sk

Účtovníctvo, Faktúry, Sklady

jednoducho ovládateľné programy od MRP za 20 rokov cez 100000 inštalácií www.mrp.sk

jednoducha kalkulacka

Zaslať odpoveď
AutorSpráva
svejk
Užívateľ
Užívateľ

Založený: 18.03.2007
Príspevky: 251

PríspevokZaslal: Ne 15.01.12 11:33Odpovedať s citátomNávrat hore

zdravim snazil som sa naprogramovat jednoduchu kalkulacku:
kód:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>


    float cislo1, cislo2;
    char operand;
    float vysledek;

int main (void){

    puts("this is calculator from SVEJK");
    puts("=============================\n\n\n");


    scanf("%f%c%f", &cislo1, &operand, &cislo2);
    vypocet();


return 0;
}


void vypocet (){

    switch(operand){
        case'+':
        vysledek=cislo1+cislo2;
        printf("%f\n", vysledek);
        scanf("%c%f", &operand, &cislo2);
        vypocet();
        case'/':
        vysledek=cislo1/cislo2;
        printf("%f", vysledek);
        scanf("%c%f", &operand, &cislo2);
        vypocet();
        case'*':
        vysledek=cislo1*cislo2;
        printf("%f", vysledek);
        scanf("%c%f", &operand, &cislo2);
        vypocet();
        case'-':
        vysledek=cislo1-cislo2;
        printf("%f", vysledek);
        scanf("%c%f", &operand, &cislo2);
        vypocet();

        }

}


no je tu jeden problem.. najskor nacita cislo+operand+cislo, pokracujefunkciou vypocet kde sa podla operandu prevedie vypocet. dalej som chcel aby znovu nacital operand+cislo, a pokracoval funkciou vypocet, aby to fungovalo jak nekonecna kalkulacka..

lenze scanf("%c%f", &operand, &cislo2); poda kontrolnych vypisou nenacitava dbre znak operand. neviete niektopreco??

som zaciatocnik.. sorry za mozno debilne otazky
Zobraziť informácie o autoroviOdoslať súkromnú správuICQ
Fico
Skúsený užívateľ
Skúsený užívateľ

Založený: 11.01.2009
Príspevky: 1052

PríspevokZaslal: Ne 15.01.12 14:31Odpovedať s citátomNávrat hore

1.) kedze nepouzivas prikaz break po kazdom navesti v prikaze switch, po kazdom navesti sa jednoducho prejde na dalsie navestie. Prejavi sa to sice az uplne na konci, ak zadas napr iny znak, ako + - * / , kedze pouzivas rekurziu, ale je to velmi casta chyba a zaciatocnici ju dost tazko hladaju. Nikdy preto na break nezabudaj, ak nie je nutne vykonat viac navesti - v tomto pripade to nutne nie je, prave naopak, je to chyba.

2.) predopkladam, ze ak zadavas dalsie moznosti hned po prvej, kde uz citas iba operand a cislo, chces nadvazovat na predchadzajuci vysledok. Ty ale nikde nepouzivas tento vysledok, stale pocitas odznova.

3.) tu je hlavny povodca chyby - opat zabudas, ze scanf nacitava aj znak enter a ten robi pri dalsom citani neplechu. Radu, ako sa s tym vysporiadat, som ti dal v tejto teme. Takze mozes pouzit %*c aby ho ignorovalo, kedze vravis, ze funkcia, ktoru som ti poradil, je pre teba tazkopadna.

Vysledny funkcny program:
kód:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>

void vypocet ();


    float cislo1, cislo2;
    char operand;
    float vysledek;

int main (void){

    puts("this is calculator from SVEJK");
    puts("=============================\n\n\n");


    scanf("%f%c%f%*c", &cislo1, &operand, &cislo2);
    vysledek = cislo1;
    vypocet();


return 0;
}


void vypocet (){

    switch(operand){
        case'+':
        vysledek=vysledek+cislo2;
        printf("%f\n", vysledek);
        scanf("%c%f%*c", &operand, &cislo2);
        vypocet();
        break;
        case'/':
        vysledek=vysledek/cislo2;
        printf("%f\n", vysledek);
        scanf("%c%f%*c", &operand, &cislo2);
        vypocet();
        break;
        case'*':
        vysledek=vysledek*cislo2;
        printf("%f\n", vysledek);
        scanf("%c%f%*c", &operand, &cislo2);
        vypocet();
        break;
        case'-':
        vysledek=vysledek-cislo2;
        printf("%f\n", vysledek);
        scanf("%c%f%*c", &operand, &cislo2);
        vypocet();
        break;
        }

}
Zobraziť informácie o autoroviOdoslať súkromnú správuICQ
svejk
Užívateľ
Užívateľ

Založený: 18.03.2007
Príspevky: 251

PríspevokZaslal: Ne 15.01.12 17:45Odpovedať s citátomNávrat hore

dakujem, na ten enter stale zabudam..

este by som ta prosil o vysvetlenie ohladom jedneho caseu ktory som dorobil. mal by vyrabat mocninu len hlasi ze je zly navratovy typ, no on je dobry tu je ta cast:
kód:
case'n':
        vysledek=mocnina(vysledek, cislo2);
        printf("%f", vysledek);
        scanf("%c%f%*c", &operand, &cislo2);
        vypocet();
        break;

        }
return 0;
}

float mocnina (float cislo, float exponent){
float umocnene;
    for(int n=exponent; n>0; n--){
        umocnene=cislo*cislo;
        }
return umocnene;
}


to vyladovanie programou mi nejde..

// pridané po 6 minútach od posledného príspevku

alebo dalsi moznost:
kód:
case'n':
        vysledek=mocnina();
        printf("%f", vysledek);
        scanf("%c%f%*c", &operand, &cislo2);
        vypocet();
        break;

        }
return 0;
}

float mocnina (){

    for(int n=cislo2; n>1; n--){
        vysledek=vysledek*vysledek;
        }
return vysledek;
}


// pridané po 7 minútach od posledného príspevku

no uz mi to funguje:
kód:
case'n':
        vysledek=pow(vysledek, cislo2);
        printf("%f\n", vysledek);
        scanf("%c%f%*c", &operand, &cislo2);
        vypocet();
        break;

        }
return 0;
}


jaka bola chyba v tych funkciach?
diki
Zobraziť informácie o autoroviOdoslať súkromnú správuICQ
Fico
Skúsený užívateľ
Skúsený užívateľ

Založený: 11.01.2009
Príspevky: 1052

PríspevokZaslal: Ne 15.01.12 22:13Odpovedať s citátomNávrat hore

Pretoze funkcia mocnina() bola sice definovana ( telo funkcie ), ale zrejme nebola deklarovana - v programe nebolo zavedene jej meno. Je spravne uviest prototypy ( deklaracie ) funkcii na zaciatku programu, ak nepouzivas hlavickove subory, ktore to maju za ulohu. Priklad tvojho riesenia:
kód:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>

void vypocet ();
float mocnina (float cislo, float exponent);

/* pokracovanie programu ... */
Zobraziť informácie o autoroviOdoslať súkromnú správuICQ
vychytraly
Užívateľ
Užívateľ

Založený: 29.09.2011
Príspevky: 143
Bydlisko: Letanovce
Vek: 17

PríspevokZaslal: Ut 17.01.12 16:18Odpovedať s citátomNávrat hore

ak sa mozem spytat v akom jazyku je to?

_________________
Coolermaster Elite 335 • Intel DH57DD • Intel i7 870 3,3 GHz • Noctua NH-D14 • Kingston HyperX Grey Series 2x4GB DDR3 1600MHz • Sapphire Radeon HD6950 Flex 2GB 800 MHz / 5200 MHz • Seagate Barracuda XT 2TB 7200 ot. • Cougar CMX 700 • Windows 7 Professional 64bit
Zobraziť informácie o autoroviOdoslať súkromnú správu
Ďuri
Administrátor
Administrátor

Založený: 11.08.2007
Príspevky: 3785
Bydlisko: Brno

PríspevokZaslal: Ut 17.01.12 16:24Odpovedať s citátomNávrat hore

C.
Zobraziť informácie o autoroviOdoslať súkromnú správuJabberSkype
vychytraly
Užívateľ
Užívateľ

Založený: 29.09.2011
Príspevky: 143
Bydlisko: Letanovce
Vek: 17

PríspevokZaslal: Ut 17.01.12 16:33Odpovedať s citátomNávrat hore

Dakujem

_________________
Coolermaster Elite 335 • Intel DH57DD • Intel i7 870 3,3 GHz • Noctua NH-D14 • Kingston HyperX Grey Series 2x4GB DDR3 1600MHz • Sapphire Radeon HD6950 Flex 2GB 800 MHz / 5200 MHz • Seagate Barracuda XT 2TB 7200 ot. • Cougar CMX 700 • Windows 7 Professional 64bit
Zobraziť informácie o autoroviOdoslať súkromnú správu
Zobraziť príspevky z predchádzajúcich:    
Zaslať odpoveď
Nemôžete pridávať nové témy do tohto fóra.
Nemôžete odpovedať na témy v tomto fóre.
Nemôžete upravovať svoje príspevky v tomto fóre.
Nemôžete mazať svoje príspevky v tomto fóre.
Nemôžete hlasovať v tomto fóre.

Powered by phpBB 2.x.x © 2005 - 2012 PCforum, webhosting by WebSupport, edited by JanoF

SEO - optimalizácia pre vyhľadávače

Freebsd