Přidat otázku mezi oblíbenéZasílat nové odpovědi e-mailemZamknuto Program na počítání úrokové míry - test na nervy [C#]

Zdravím,
mám menší porblém. V C# jsem napsal program na počítání úrokové míry. Je to celkem test na nervy a na chápání kódu. Kód je následovný:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace PocitaniUrokoveMiry
{
    class Program
    {
        static void Main(string[] args)
        {
            Console.WriteLine("Vítá vás kalkulačka pro počítání úrokové míry verze 1.0, vytvořená by Ondřej Búřil"); //konzolový komentář pro user interface

                Console.WriteLine("Zadejte počáteční vloženou částku:"); //konzolový komentář pro user interface
                float VlozenaCastka = float.Parse(Console.ReadLine()); //uložení proměnné VlozenaCastka do RAM

                Console.WriteLine("Nyní zadejte úrok (v procentech bez procentového znaménka):"); //konzolový komentář pro user interface
                float Urok = float.Parse(Console.ReadLine()); //uložení proměnné Urok do RAM

                Console.WriteLine("Nyní zadejte daň (v procentech bez procentového znaménka) :"); //konzolový komentář pro user interface
                float Dan = float.Parse(Console.ReadLine()); //uložení proměnné Dan do RAM

                Console.WriteLine("Nyní zadejte počet měsíců, po které bude částka uložena:"); //konzolový komentář pro user interface
                int PocetMesicu = int.Parse(Console.ReadLine()); //uložení proměnné PocetMesicu do RAM

                float VyslednaCastka;

                float a = VlozenaCastka / 100; //Jedno procento z vložené částky

                float b = a * Urok; //Úrok z vložené částky

                float c = b / 100; //Jedno procento z úroku

                float d = c * Dan; //Daň z úroku

                float e = Urok - d; //Úrok mínus daň z úroku - co dostaneme na úrocích

                float f = VlozenaCastka + e; //Výsledná částka

                string vystup = "Úroková míra je:" + f;

                Console.WriteLine(vystup);
                Console.ReadKey();


        }
    }
}

Program ale má v sobě nějakého zakopaného psa, kterého jsem nedokázal najít. Počítá špatně. Když daním jenom úrok, tak se mi musí celková částka jenom přičítat, ne odečítat. Např. při vložené částce 10000, úroku 2%, dani 15% a počtu měsíců (ještě jsem nějak nerozlouskl jak ten výpočet zapsat do kódu, prakticky nefunkční) 0 mi háže celkovou částku 9972. Co mám špatně?

Díky, SteveXtreme.

P.S.: Kdyby byl někdo schopný můj kód opravit a přidat na funkčnosti počtu měsíců kde se celá věc podstatně komplikuje, byl bych vděčný <3
Lock na přání autora dotazu. (karel)
Vymazané odpovede mimo témy. (los)

Předmět Autor Datum
float e = b - d; //Úrok mínus daň z úroku - co dostaneme na úrocích Ale proč tak složitě? var vysl…
Wikan 28.01.2015 19:58
Wikan
funguje program po tomhle? Zkracováním kódu jsem ještě neprošel, jde mi hlavně o funkčnost. Každopád…
SteveXtreme 28.01.2015 20:00
SteveXtreme
Nerozumím otázce.
Wikan 28.01.2015 20:02
Wikan
1.) Co mám nahradit v mém kódu za tvůj kód 2.) Program po nahrazení mého za tvůj kód funguje?
SteveXtreme 28.01.2015 20:03
SteveXtreme
Já ti nevím, jak se to celé počítá. Ale třebas s PocetMesicu vůbec ve výsledku nepočítáš.
Flash_Gordon 28.01.2015 20:05
Flash_Gordon
TO jsem právě zmiňoval. Tím se celý kód vcelku komplikuje a já jsem ještě nerozlouskl, jak to zapsat…
SteveXtreme 28.01.2015 20:06
SteveXtreme
1) Horní kód nahrazuje jeden konkrétní řádek, je snad jasné jaký. Dolní kód je celý výpočet, ale byl…
Wikan 28.01.2015 20:07
Wikan
Díky moc, už to jede. Kde byla chyba? Ještě budu dělat program na procentuální počítání počtu výher,…
SteveXtreme 28.01.2015 20:10
SteveXtreme
Snad dokážeš ty dva řádky porovnat, abys poznal, co se tam změnilo.
Wikan 28.01.2015 20:10
Wikan
Celkem dotst - proto to nechápu.
SteveXtreme 28.01.2015 20:20
SteveXtreme
float e = Urok - d; //Úrok mínus daň z úroku - co dostaneme na úrocích ne. ale takto: float e = b…
MM.. 28.01.2015 20:10
MM..
Mohl bys prosím tvůj a Wikianův kód zakompilovat do mého v jednom souboru? Nějak nwm jak xD... teda…
SteveXtreme 28.01.2015 20:12
SteveXtreme
wikanov sposob by bol takto: for (i=0; i<PocetObdobi; i++) { VlozenaCastka = VlozenaCastka * (1 + U…
MM.. 28.01.2015 20:16
MM..
už se opravil takže tohle bych měl dát místo floatu e? tenhle kod?
SteveXtreme 28.01.2015 20:20
SteveXtreme
P.S. a este tusim je nutne urobit zaokruhlovanie podla zakona, neni to az tak uplne jedno, zaokruhlo…
MM.. 28.01.2015 20:21
MM..
to neresim, to nemam na komercni ucely xD ale dobra poznamka, zkusim to do kodu nejak dat.
SteveXtreme 28.01.2015 20:23
SteveXtreme
Tu chybu už jsem opravil. Spíš bych to viděl takhle: var vysledek = VlozenaCastka * Math.Pow((1 + U…
Wikan 28.01.2015 20:21
Wikan
Ja si myslim ze danovy urad treba zrusit a potom nebude treba taketo kraviny ;)) P.S. ano ak to je…
MM.. 28.01.2015 20:22
MM..
No to mi povídej, teď jsem počítal daň z nemovitosti...
Wikan 28.01.2015 20:23
Wikan
Takže nějaký definitivní kód, jak bych měl celý program napsat? Omlouvám se, že všechno chci tak pol…
SteveXtreme 28.01.2015 20:27
SteveXtreme
definitivny kod je ten 1 riadok od wikana 3prispevky vyssie. To je cely program. Ale je to bez zaokr…
MM.. 28.01.2015 20:32
MM..
To záleží na tom, jak to potřebuješ. Úroková sazba je měsíční nebo roční? Úroky se počítají měsíčně…
Wikan 28.01.2015 20:33
Wikan
1.) Nic nezaokrouhlovat 2.) Úroková sazba je měsíční, závislá na (ani nevím proč floatu) PocetMesicu…
SteveXtreme 28.01.2015 20:37
SteveXtreme
V tom riadku uz ma aj pocet mesicu. Pow je mocnina. Nepotrebujes potom cykly. To je snad matematika…
MM.. 28.01.2015 20:38
MM..
Pokud je úroková sazba měsíční, tak stačí v tom kódu změnit 1200 na 100.
Wikan 28.01.2015 20:39
Wikan
*vzdych* Nechci být nevděčný, ale to stále neodpovídá na otázku, jak zfunkčnit PocetMesicu.
SteveXtreme 28.01.2015 20:40
SteveXtreme
var vysledek = VlozenaCastka * Math.Pow((1 + Urok * (1 - Dan / 100) / 100)), PocetMesicu); to je c…
MM.. 28.01.2015 20:42
MM..
Řekněme, že "nevím", co na tom nefunguje. (P.S.: chybovy vypis, omlouvam se za tu bílou část, špatný…
SteveXtreme 28.01.2015 20:46
SteveXtreme
Chyba tam jedna zatvorka hned za Pow (alebo zmaz predposlednu zatvorku) P.S. pripadne ak mu potom b… poslední
MM.. 28.01.2015 20:56
MM..
Btw. to sa v CR meraju uroky a dane mesacne? Dan sa snad rata len rocne (?) Daň se počítá v okamžik…
Wikan 28.01.2015 20:12
Wikan
Tak nějak... myslím... ja nwm tak sme se to učili ve FIGu.
SteveXtreme 28.01.2015 20:13
SteveXtreme

float e = Urok - d; //Úrok mínus daň z úroku - co dostaneme na úrocích

ne. ale takto:

float e = b - d; //Úrok mínus daň z úroku - co dostaneme na úrocích

Pouzivas dementne nazvy premennych, a potom nevies co je co a scitavas dokopy nezmysly. Normalne mas mat premenne napr. UrokovaMieraZaMesiac, DanVPercentachZaMesiac. Aby bolo uplne jasne ze to je za mesiac alebo za rok alebo za kolko to tam vlastne mas, a ze to je miera a ne suma. Btw. to sa v CR meraju uroky a dane mesacne? Dan sa snad rata len rocne (?)

Nacitas ich zo vstupu. potom urobis napr.:

for(i=0; i<PocetMesiacov; i++) {
 UrokZaMesiac = VlozenaCastka * UrokovaMieraZaMesiac / 100;  // zatvorky netreba, a stejne je lepsie najprv nasobit lebo nizsia chyba vypoctu.
 DanZaMesiac = UrokZaMesiac * DanVPercentachZaMesiac / 100;
 VlozenaCastka += UrokZaMesiac - DanZaMesiac; // vysledna castka je zaroven "vlozena castka" pre vypocet dalsieho mesiaca
}

P.S. a ked ti nefunguje program tak si ho odkrokujes v debuggeri a pozeras premenne, a vidis za 3sekundy co tam je blbo.

Tu chybu už jsem opravil.
Spíš bych to viděl takhle:

var vysledek = VlozenaCastka * Math.Pow((1 + Urok * (1 - Dan / 100) / 1200)), PocetMesicu);

Za předpokladu, že úroky se připisují úroková míra je roční, úroky se připisují měsíčně a neřešíme zaokrouhlování.

1.) Nic nezaokrouhlovat
2.) Úroková sazba je měsíční, závislá na (ani nevím proč floatu) PocetMesicu. To potrebuju nejakym cyklem zakomponovat do kodu, aby to pocitalo i s tim poctem mesicu za predpokladu ze se tvuj kod pocita jednou za cyklus na kazdy mesic a pak se pricte k vysledku. To nevim jak napsat.

Tak to potrebuju. S tvym radkem kodu to funguje, ale potrebuju ten kus kodu na pocitani s PocetMesicu, aby program byl skutecne funkcni.

Zpět do poradny Nahoru