• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

Porównanie wartości 2 pętli

Object Storage Arubacloud
0 głosów
1,090 wizyt
pytanie zadane 15 listopada 2016 w C i C++ przez niezalogowany

Witam Dopiero od niedawna uczę się języka C++ z książki. Wykorzystuję do tego IDE Xcode 8 na systemie OS X 10.11.6. Mam takie zadanie: Dafne inwestuje 100 zł z oprocentowaniem 10%. Co roku zarabia 10% pierwotnego kapitału, czyli zarabia 10 zł rocznie. W tym samym czasie Cleo inwestuja 100 zł w lokatę z oprocentowaniem 5%, ale liczonym jako procent składany. Zatem co roku zarabia 5% dotychczasowej kwoty liczonej wraz z odsetkami dotąd zebranymi. W 1. roku Cleo zarobi 5% ze 100 zł, czyli 105 zł, w drugim 5% ze 105%, czyli 5,25 zł itd. Napisz program sprawdzający, kiedy inwestycje Cleo przekroczą co do wysokości inwestycje Dafne, a później pokazujący zestawienie obu wartości w tym samym czasie. I tu problem. Inwestycje Cleo zawsze będą niższe od Dafne. Pierwszą część zadania sobie odpuściłem i chcę tylko zestawić wartości inwestycji Dafne i Cleo w formie tabelki. Tutaj mam pytanie. Czy mam obie pętle for zawrzeć w osobne tabelki a potem 2 tabelki połączyć czy coś innego lepiej zrobić?

 

#include <iostream>
#include <string>
int main()
{
    using namespace std;
    int x, z;
    int i = 100;
    double dafne;
    double cleo;
    cout << "Wartość: " << endl;
        for (dafne = 100; dafne < 300; dafne = (0.1 * i) + dafne, x++)
         cout << "Dafne: " << dafne << endl;
    cout << endl;
     for (cleo = 100; cleo < 300; cleo = 1.05 * cleo, z++)
         cout << "Cleo: " << cleo << endl;

    return 0;
}

 

3 odpowiedzi

+1 głos
odpowiedź 15 listopada 2016 przez niezalogowany
edycja 30 sierpnia 2017
 
Najlepsza

 Inwestycje Cleo zawsze będą niższe od Dafne.

Nie zawsze. Możesz to zrobić jedną pętlą np tak:

#include <iostream>
using namespace std;
int main()
{
    double i = 100;
    double dafne = i;
    double cleo = i;

    for (int rok = 1;; rok++)
    {
        dafne = dafne + 0.1*i;
        cleo = cleo + 0.05*cleo;

        cout<<"Rok "<<rok<<":"<<endl;
        cout<<"Dafne: "<<dafne<<endl;
        cout<<"Cleo: "<<cleo<<endl;
        cout<<endl;

        if(cleo>dafne) break; // przerwanie pętli
    }

    return 0;
}
komentarz 15 listopada 2016 przez niezalogowany
Nie wyobrażaj sobie tego jako tablicę. Możesz robić tabelę korzystając z pętli i wypisując dwie/trzy wartości w jednej linii. Oddzielając je znakami "|". Powinno wyjść coś na kształt krzywej tabelki.
komentarz 15 listopada 2016 przez niezalogowany
Aha dzięki :) Z ciekawości pytałem :) To już zostawię na później jak więcej się nauczę :)

Jeszcze raz dzięki za pomoc :)
komentarz 15 listopada 2016 przez niezalogowany
Mogę tylko 1 odpowiedź zaznaczyć jako najlepsza :) Nie mogę 2 bo odznacza tą 1 :)
komentarz 15 listopada 2016 przez niezalogowany

Okej :) Tabelkę możesz zrobić np tak:

#include <iostream>
#include <iomanip> // do setprecision i chyba fixed

using namespace std;

int main()
{
    double i = 100;
    double dafne = i;
    double cleo = i;

    cout<<fixed<<setprecision(2); // wyrownanie dlugosci liczb -> patrz wypisywanie zawsze 2 miejsc po przecinku
    cout<<"|   Dafne    |   Cleo     |"<<endl;
    // for(int k=0; k<27; k++) {cout<<"-";} cout<<endl; // pozioma kreska

    for (int rok = 1; cleo<=dafne; rok++)
    {

        dafne = dafne + 0.1*i;
        cleo = cleo + 0.05*cleo;
        cout<<"|   "<<dafne<<"   |   "<<cleo<<"   |"<<endl;

        // for(int k=0; k<27; k++) {cout<<"-";} cout<<endl; // poziome kreski

    }
    return 0;

}

Chociaż sposobów jest naprawdę wiele... 

komentarz 20 listopada 2016 przez niezalogowany
Jest tyle co programistów pewnie ;)
+1 głos
odpowiedź 15 listopada 2016 przez Knayder Nałogowiec (37,640 p.)
#include <iostream>
#include <Windows.h>
using namespace std;
int main()
{
	const int dafneStart = 100, cleoStart = 100;
	double dafne = dafneStart, cleo = cleoStart;
	int amount=0;
	do
	{
		dafne += 0.1*dafneStart;
		cleo *= 1.05;
		cout << dafne << " " << cleo << endl;
		amount++;
	} while (dafne >= cleo);
	cout << "========\nInwestycja cleo przerosnie dafne po " << amount << " latach." << endl;
	system("pause");
	return 0;
}

Tylko że jeżeli nie masz Windowsa, to zmień Windows.h na coś innego co ma możliwość zatrzymania konsoli, lub usuń tą dyrektywę i na końcu daj cin >> na jakąś zminną.

komentarz 15 listopada 2016 przez Knayder Nałogowiec (37,640 p.)
Program jest niekompletny, nie ma wyjścia z sytuacji w której cleo zawsze będzie miała tańszą inwestycje.
Wystarczy np. while(dafne >= cleo&&amount<100);
0 głosów
odpowiedź 15 listopada 2016 przez criss Mędrzec (172,590 p.)

I tu problem. Inwestycje Cleo zawsze będą niższe od Dafne. 

No nie zawsze. W twoim przedziale (czyli przemnażaj dopóki dafne/cleo nie będzie miała więcej niż 300) tak, ale to nie zawsze. Nie doszukałem się w treści zadania takiego warunku.

Symulacja na 100 lat:

    float d = 100, c = 100;
    for(int i = 0; i < 100; i++)
    {
        std::cout << i + 1 <<" : ";
        std::cout << "D: " << (d += 0.1 * 100.) << ' ';
        std::cout << "C: " << (c *= 1.05) << "\n\n";
    }

 Output:

26 : D: 360 C: 355.567

 

27 : D: 370 C: 373.346

 

28 : D: 380 C: 392.013

Już w 27. iteracji cleo ma więcej, a jej przewaga będzie się ofc zwiększać. 

Czy mam obie pętle for zawrzeć w osobne tabelki a potem 2 tabelki połączyć czy coś innego lepiej zrobić?

Jak ci się podoba. Nie rozumiem dlaczego pytasz :P 

komentarz 15 listopada 2016 przez niezalogowany
Bo może można zrobić to prościej. Dlatego pytam.
komentarz 15 listopada 2016 przez niezalogowany
Bo inaczej pętla latałaby mi  w nieskończoność. Dlatego ograniczyłem do tylu.
komentarz 15 listopada 2016 przez criss Mędrzec (172,590 p.)
No ale wtedy nie stwierdzaj, że zawsze :D
komentarz 15 listopada 2016 przez niezalogowany
Dobra, tylko na tym etapie mógłby odpuścić sobie te 100 lat na tym etapie, nie? Musiałbym ciągle powiększać co chwile limit lat aż bym doszedł do tych 100 lat, a nie o to chodzi w programowaniu, nie? Co gdyby podstawić inne wartości i czas "wyprzedzenia" trwałby np. 20 lat? NIe potrzebne byłyby wyniki po tych 20 latach a to już jest marnotracwo zasobów sprzętowych, nie? :)
komentarz 15 listopada 2016 przez criss Mędrzec (172,590 p.)
Ten mój kod ofc nie rozwiązaniem zadania. Chciałem tylko zobaczyć wartości dafne i cleo. Treść zadania sugeruje, że kiedyś to sie stanie, więc najlepiej to zrobić w while-u (cleo < dafne) albo tak jak napisał Hipcio - po prosty przerwać fora w odpowiednim ifie.
komentarz 20 listopada 2016 przez niezalogowany
Dopiero teraz wiem jak przerwać ifa i to na 2 sposoby :)

Podobne pytania

0 głosów
3 odpowiedzi 1,104 wizyt
0 głosów
2 odpowiedzi 144 wizyt
pytanie zadane 5 lutego 2016 w C i C++ przez Jonki Dyskutant (8,180 p.)

92,568 zapytań

141,420 odpowiedzi

319,620 komentarzy

61,954 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj.

Akademia Sekuraka

Kolejna edycja największej imprezy hakerskiej w Polsce, czyli Mega Sekurak Hacking Party odbędzie się już 20 maja 2024r. Z tej okazji mamy dla Was kod: pasjamshp - jeżeli wpiszecie go w koszyku, to wówczas otrzymacie 40% zniżki na bilet w wersji standard!

Więcej informacji na temat imprezy znajdziecie tutaj. Dziękujemy ekipie Sekuraka za taką fajną zniżkę dla wszystkich Pasjonatów!

Akademia Sekuraka

Niedawno wystartował dodruk tej świetnej, rozchwytywanej książki (około 940 stron). Mamy dla Was kod: pasja (wpiszcie go w koszyku), dzięki któremu otrzymujemy 10% zniżki - dziękujemy zaprzyjaźnionej ekipie Sekuraka za taki bonus dla Pasjonatów! Książka to pierwszy tom z serii o ITsec, który łagodnie wprowadzi w świat bezpieczeństwa IT każdą osobę - warto, polecamy!

...