Kalkulacka C sharp

Programovacie jazyky, rady, poradňa...
Andrejka66
Amateur
Amateur
Príspevky: 13
Registrovaný: 15 jan 2009, 20:47

Kalkulacka C sharp

Príspevok od používateľa Andrejka66 »

Zdravim chlapci. Nevedl by mi niekto pomoct prosim so zadanim? treba spravit kalkulacku v c sharp ma to mat funkcie + - * / a mocnina a odmocnina. Nieco som uz spravila ale ta mocnina a odmicnina mi nako nejde. pomoze mi to tam niekto dopasovat? Ma to byt stylom dedenia tried Bola by som velmi povdacna. Dakujem

toto uz mam :

Kód: Vybrať všetko

using System;

public class Calculator
{
public static void Main()
{
int cislo1;
int cislo2;
string operacia;
float vysledok;


Console.Write("Zadajte prvú premennú: ");
cislo1 = Convert.ToInt32(Console.ReadLine());


Console.Write("Zvolte operáciu(+, -, /, *): ");
operacia = Console.ReadLine();


Console.Write("Zadajte druhú premennú: ");
cislo2 = Convert.ToInt32(Console.ReadLine());

switch (operacia)
{
case "-":
vysledok = cislo1 - cislo2;
break;
case "+":
vysledok = cislo1 + cislo2;
break;
case "/":
vysledok = cislo1 / cislo2;
break;
case "*":
vysledok = cislo1 * cislo2;
break;
default:
vysledok = 0;
break;
}

Console.WriteLine(cislo1.ToString() + " " + operacia + " " + cislo2.ToString() + " = " + vysledok.ToString());

Console.ReadLine();

}
}
no oznacenie mocniny satci "m" a odmocniny "o" a nejako treba osetrit to aby sa nestal pripad ze X/0 - cize treba aby napisalo ze delim nulou co nie je mozne...
Fata! ChaoS
Star
Star
Používateľov profilový obrázok
Príspevky: 650
Registrovaný: 12 apr 2006, 20:23
Bydlisko: Tvrdošovce
Kontaktovať používateľa:

Príspevok od používateľa Fata! ChaoS »

A ako má byť zápis mocniny a odmocniny?
To nemáš zadané? alebo jak presne je zadanie?
Lebo znak odmocniny sa ťažko napíše :)
Takže, by trebalo nejaké menu, kde každé písmeno prislúcha k nejakej operácii, či je to násobenie alebo odmocnina.
A používateĺ potom zatlačí príslušný znak a podľa toho sa vykoná daná operácia.
Andrejka66
Amateur
Amateur
Príspevky: 13
Registrovaný: 15 jan 2009, 20:47

Príspevok od používateľa Andrejka66 »

nikto mi nepomoze?
audiotrack
VIP
VIP
Používateľov profilový obrázok
Príspevky: 25958
Registrovaný: 09 sep 2005, 18:39
Kontaktovať používateľa:

Príspevok od používateľa audiotrack »

delenie s ošetrením delenia nulou bude:

Kód: Vybrať všetko

.
.
.
case "/":
    if(cislo2 <> 0) {
       vysledok = cislo1 / cislo2;
    } else {
       Console.Write("Delenie nulou"); 
       return;
    }
break; 
.
.
.
odmocnina a mocnina bude rovnako ako všetky tie operácie čo si už spravila, len si pozri ako sa zapisujú v c# (tuším sqrt a sqr ale nie som istý)
BX
Addict
Addict
Používateľov profilový obrázok
Príspevky: 4572
Registrovaný: 10 jan 2008, 15:30

Príspevok od používateľa BX »

Odmocninu zial viem len druhu odmocninu (teda bez druhej premennej) takze by som to riesil asi takto:

Kód: Vybrať všetko

using System;

public class App
{
public static void Main()
{
int cislo1=0;
int cislo2=0;
string operacia;
double vysledok=0;


Console.Write("Zadajte prvú premennú: ");
cislo1 = Convert.ToInt32(Console.ReadLine());


Console.Write("Zvolte operáciu(+, -, /, *): ");
operacia = Console.ReadLine();

if(operacia=="o") vysledok = Math.Sqrt(cislo1); // preskocenie zadavania druhej premennej
 else
 { 
  Console.Write("Zadajte druhú premennú: ");
  cislo2 = Convert.ToInt32(Console.ReadLine());
 

switch (operacia)
{
case "-":
vysledok = cislo1 - cislo2;
break;

case "+":
vysledok = cislo1 + cislo2;
break;

case "/":
vysledok = cislo1 / cislo2;
break;

case "*":
vysledok = cislo1 * cislo2;
break;

case "m":
vysledok = Math.Pow(cislo1, cislo2);
break;

default:
vysledok = 0;
break;
}

}

if(operacia == "o") Console.WriteLine("odmocnina z " + cislo1 + " = " + vysledok); // tiez vystup kvoli odmocnine
 else Console.WriteLine(cislo1.ToString() + " " + operacia + " " + cislo2.ToString() + " = " + vysledok.ToString()); 

Console.ReadLine();

}
} 
Ak chces Y-tu odmocninu z cisla X, tak si najdi :P :)
audiotrack
VIP
VIP
Používateľov profilový obrázok
Príspevky: 25958
Registrovaný: 09 sep 2005, 18:39
Kontaktovať používateľa:

Príspevok od používateľa audiotrack »

BX napísal:Odmocninu zial viem len druhu odmocninu (teda bez druhej premennej) takze by som to riesil asi takto:

Ak chces Y-tu odmocninu z cisla X, tak si najdi :P :)
s matikou asi kamarát nie si, čo? :) cez exponenciálnu a logaritmickú funkciu by si sa dopracoval k tomu, že y-tu odmocninu z x je možné zapísať ako exp((1/y)*ln(x))

(postup odvodzovania nebudem uvádzať, dúfam ale že som v ňom nespravil chybu. Myslím že nie )
BX
Addict
Addict
Používateľov profilový obrázok
Príspevky: 4572
Registrovaný: 10 jan 2008, 15:30

Príspevok od používateľa BX »

No... po prve: Navazat sa do mna s logaritmickymi a exp funkciami je dost nevhodne, kedze som sa ich este neucil :D Ale je pravda, ze som si o nich co to precital, kedze tento zaps som hojne pouzival v pascale (btw. nema to byt exp((y)*ln(x)) ?)

Po druhe: Napisal som, ze v C# viem len druhu odmocninu. Zial toto v C# zapisat neviem :)

// jaj wtf som si to pomilil zas :lol: Sorry jasne ze to mas dobre :)
audiotrack
VIP
VIP
Používateľov profilový obrázok
Príspevky: 25958
Registrovaný: 09 sep 2005, 18:39
Kontaktovať používateľa:

Príspevok od používateľa audiotrack »

nemá :)
(to tvoje robí x^y)
Fata! ChaoS
Star
Star
Používateľov profilový obrázok
Príspevky: 650
Registrovaný: 12 apr 2006, 20:23
Bydlisko: Tvrdošovce
Kontaktovať používateľa:

Príspevok od používateľa Fata! ChaoS »

Dalo by sa to aj s pow(x,1/y), nie? Veď prevrátená hodnota mocniteľa nám dá odmocninu.

P.S. Andrejka, prečo si mi neodpovedala na prvý príspevok? :lol:
audiotrack
VIP
VIP
Používateľov profilový obrázok
Príspevky: 25958
Registrovaný: 09 sep 2005, 18:39
Kontaktovať používateľa:

Príspevok od používateľa audiotrack »

Fata! ChaoS napísal:Dalo by sa to aj s pow(x,1/y), nie? Veď prevrátená hodnota mocniteľa nám dá odmocninu.

P.S. Andrejka, prečo si mi neodpovedala na prvý príspevok? :lol:
dalo, ale len preto že tá funkcia ráta tak isto ako ja. Keby bola zle naprogramovaná (napríklad by si ju niekto robil sám a rátal mocninu v cykle alebo rekurziou) tak by bol obmedzený len na prirodzený exponent. Aby sa tomu predišlo a mohol byť exponent aj desatinné číslo (a teda ti to dokáže vyrátať aj takúto odmocninu) tak je pow naprogramovaný práve tak ako som napísal. Napríklad v delphi v math si môžeš pozreť:

Kód: Vybrať všetko

function Power(const Base, Exponent: Extended): Extended;
begin
  if Exponent = 0.0 then
    Result := 1.0               { n**0 = 1 }
  else if (Base = 0.0) and (Exponent > 0.0) then
    Result := 0.0               { 0**n = 0, n > 0 }
  else if (Frac(Exponent) = 0.0) and (Abs(Exponent) <= MaxInt) then
    Result := IntPower(Base, Integer(Trunc(Exponent)))
  else
    Result := Exp(Exponent * Ln(Base))
end;
Kľudne si to pozri aj v iných, ale momentálne som mal delphi otvorené tak som to zkopíroval z neho. Určite bude podobne aj v céčku či iných jazykoch. Čiže ty pomocou pow počítaš tak isto, len to voláš zaobalene v tej funkcii

//edit: na tvoj príspevok ti odpovedala, neviem prečo to potom zmazala. Odmocnina má byť zadaná z klávesnice ako "o", mocnina ako "m"
Andrejka66
Amateur
Amateur
Príspevky: 13
Registrovaný: 15 jan 2009, 20:47

Príspevok od používateľa Andrejka66 »

Fata! ChaoS napísal:Dalo by sa to aj s pow(x,1/y), nie? Veď prevrátená hodnota mocniteľa nám dá odmocninu.

P.S. Andrejka, prečo si mi neodpovedala na prvý príspevok? :lol:
Prepac mi, musela som si este uzrejmit co to po nas chce, lebo cele zadanie nam diktoval nejako divno z brucha...

//autoeditácia príspevku ( 06 Dec 2009, 13:45 )
Chlapci dakujem za pomoc fakt, ale teraz som z toho popletena z tych poslednych prispevkov... neviem teda ako to ma byt ? dakovala
audiotrack
VIP
VIP
Používateľov profilový obrázok
Príspevky: 25958
Registrovaný: 09 sep 2005, 18:39
Kontaktovať používateľa:

Príspevok od používateľa audiotrack »

posledné príspevky sú pre teba relevantné iba ak potrebuješ rátať n-tú odmocninu. Ak ti stačí druhá odmocnina, stačí ti sledovať po ten BX-ov kde máš druhú odmocninu ukázanú cez sqrt
Andrejka66
Amateur
Amateur
Príspevky: 13
Registrovaný: 15 jan 2009, 20:47

Príspevok od používateľa Andrejka66 »

stale mi to vypisuje naku chybu dala by mi to nejaka dobra dusa dokopy? bola by som velmi povdacna
BX
Addict
Addict
Používateľov profilový obrázok
Príspevky: 4572
Registrovaný: 10 jan 2008, 15:30

Príspevok od používateľa BX »

Pekne by bolo napisat aku chybu a co sa pokusas skompilovat :)
Fata! ChaoS
Star
Star
Používateľov profilový obrázok
Príspevky: 650
Registrovaný: 12 apr 2006, 20:23
Bydlisko: Tvrdošovce
Kontaktovať používateľa:

Príspevok od používateľa Fata! ChaoS »

Andrejka66 napísal:stale mi to vypisuje naku chybu dala by mi to nejaka dobra dusa dokopy? bola by som velmi povdacna
Ten BX-ov kód na začiatku mi ide v pohode skompilovať :), tak ktoré ti nejde?
Andrejka66
Amateur
Amateur
Príspevky: 13
Registrovaný: 15 jan 2009, 20:47

Príspevok od používateľa Andrejka66 »

Fata! ChaoS napísal:Ten BX-ov kód na začiatku mi ide v pohode skompilovať :), tak ktoré ti nejde?
ta mocnina mi napr nejde. a nako sa mi nedari dopasovat delenie nulou...
BX
Addict
Addict
Používateľov profilový obrázok
Príspevky: 4572
Registrovaný: 10 jan 2008, 15:30

Príspevok od používateľa BX »

Daj zdrojak, ktory sa snazis skompilovat. Opravime :)
Andrejka66
Amateur
Amateur
Príspevky: 13
Registrovaný: 15 jan 2009, 20:47

Príspevok od používateľa Andrejka66 »

Toto sa snazim dat nako dokopy....

Kód: Vybrať všetko

using System;

public class App
{
public static void Main()
{
int cislo1=0;
int cislo2=0;
string operacia;
double vysledok=0;


Console.Write("Zadajte prvú premennú: ");
cislo1 = Convert.ToInt32(Console.ReadLine());


Console.Write("Zvolte operáciu(+, -, /, *): ");
operacia = Console.ReadLine();

if(operacia=="o") vysledok = Math.Sqrt(cislo1); // preskocenie zadavania druhej premennej
 else
if(operacia=="m") vysledok = vysledok = Math.Pow(cislo1, cislo2);  // preskocenie zadavania druhej premennej
  else
 {
  Console.Write("Zadajte druhú premennú: ");
  cislo2 = Convert.ToInt32(Console.ReadLine());
 

switch (operacia)
{
case "-":
vysledok = cislo1 - cislo2;
break;

case "+":
vysledok = cislo1 + cislo2;
break;

case "/":
vysledok = cislo1 / cislo2;
if(cislo2 <> 0) {
       vysledok = cislo1 / cislo2;
    } else {
       Console.Write("Delenie nulou");
       return;
    }
break;

case "*":
vysledok = cislo1 * cislo2;
break;

case "m":
vysledok = Math.Pow(cislo1, cislo2); 
break; 

default:
vysledok = 0;
break;
}

}

if(operacia == "o") Console.WriteLine("odmocnina z " + cislo1 + " = " + vysledok); // tiez vystup kvoli odmocnine
 else Console.WriteLine(cislo1.ToString() + " " + operacia + " " + cislo2.ToString() + " = " + vysledok.ToString());
if(operacia == "m") Console.WriteLine("druha mocnina z " + cislo1 + " = " + vysledok); // tiez vystup kvoli odmocnine
 else Console.WriteLine(cislo1.ToString() + " " + operacia + " " + cislo2.ToString() + " = " + vysledok.ToString());
Console.ReadLine();

}
}
BX
Addict
Addict
Používateľov profilový obrázok
Príspevky: 4572
Registrovaný: 10 jan 2008, 15:30

Príspevok od používateľa BX »

41. riadok zmen:

Kód: Vybrať všetko

if(cislo2 != 0) {
+ mocnina ti nejde, pretoze davas mocninu(cislo1, cislo2) a pri tom cislo2 este nie je zadane :)
Andrejka66
Amateur
Amateur
Príspevky: 13
Registrovaný: 15 jan 2009, 20:47

Príspevok od používateľa Andrejka66 »

no a mam mocninu vymenit za cislo1* cilo 1? alebo ako to osetrit... a pri deleni nulou sa to vypne a nevypise delenie nulou...
Napísať odpoveď