Problem z pętlą w C++ - zadanie.

0

Hej, mam problem z jednym zadaniem które rozwiązuję sobie dla ćwiczeń.

Wszystko idzie dobrze aż do momentu, kiedy wchodzi pętla. Wiem, że na pewno są błędy, prawdopodobnie z moim rozumowaniem, dlatego uprzejmie proszę - jeśli byłaby taka możliwość - o wskazówki w którą stronę iść. Treść zadania brzmi:

Sadownik zebrał w pierwszym roku owocowania sadu X ton jabłek. W kolejnym roku zbiory wyniosły 50% zbiorów z poprzedniego roku, w kolejnym – 205% z roku go poprzedzającego, itd. na przemian. Napisz program obliczający po ilu latach owocowania sadu łączne zyski sadownika (licząc od początku) wyniosą co najmniej K zł i jakie faktycznie wówczas będą, zakładając że zysk na 1 tonie jabłek jest stały i wynosi Z zł (X, Z i K mają być pobierane od użytkownika, przy czym X i Z to liczby rzeczywiste nieujemne, a K – liczba całkowita nieujemna). Przykład: dla X=10, Z=50 i K=5000 wynikiem jest 13 lat i kwota 5370.65 zł.

Co udało mi się osiągnąć to tej pory:

#include <iostream>

using namespace std;

int main()
{
    int K, ile_lat; //K-zyski po latach, ile_lat zajmie
    float X, Z, ostateczna_kwota; //X tony, Z zysk na jablkach/tona

    cout<<"Podaj ilosc jablek w tonach z pierwszego roku: ";
    cin>>X;

    while(X<1)
    {
        cout<<"Ilosc ton nie moze byc liczba ujemna. Podaj liczbe ton: ";
        cin>>X;
        if(X>1)
            continue;
    }

    cout<<"Podaj jaki jest zysk z tony jablek: ";
    cin>> Z;

    while(Z<1)
    {
        cout<<"Zysk nie moze byc liczba ujemna. Podaj zysk z jablek: ";
        cin>>Z;
        if(Z>1)
            continue;
    }

    cout<<"Podaj zysk do sprawdzenia: ";
    cin>>K;

    while(K<1)
    {
        cout<<"Zysk nie może byc liczba ujemna. Podaj zysk do sprawdzenia: ";
        cin>> K;
        if(K>1)
            continue;
    }

    ile_lat=0;
    ostateczna_kwota=0;

    for(int i=ostateczna_kwota; i<=K; i=i+i)
    {
        int X2=X*0.5;
        i=Z*X2;
        ile_lat++;
        if(i==K || i>K)
            break;

        for(int j=i; j<=K; j=j+i)
        {
            int X3=X2*2.05;
            j=X3*Z;
            ile_lat++;
            if(j==K || j>K)
            break;
        }
    }

        cout<<"Ostateczna zarobiona kwota wyniesie: "<<ostateczna_kwota+Z<<"zl\n";
        cout<<"Wydarzy sie to po: "<<ile_lat<<" lat\n";

    return 0;
}
0

Moim zdaniem, powinno to działać tak, że iloś sprzedanych jabłek, to
x -> 0.5x -> 1.025x -> 0.5125x
Ty chyba robisz
x-> 0.5x -> 1.025x -> 2.10125x

1
#include <iostream>
using namespace std;

int main() {
	int X = 10;
	int Z = 50;
	int K = 5000;
	double jablka = X;
	double suma = jablka * Z;
	int lata = 1;
	
	while(suma < K) {
		lata++;
		jablka *= lata % 2 == 0 ? 0.5 : 2.05;
		suma += jablka * Z;
	}
	
	cout << lata << "\n";
	cout << suma;
	
	return 0;
}
0

@Haskell: Bardzo Ci dziękuję. Jak zwykle niepotrzebnie sobie dodałam roboty.

0

Hej, mam problem z kolejną pętlą. Muszę napisać tabliczkę mnożenia, skadającą się z 5 liczb całkowitych, na ekran ma się wyświetlić tablica złożona z iloczynów tych liczb. Wszystko gra poza jedną rzeczą - w ostatnim wierszu nie wyświetla się ostatnia podana liczba i jej iloczyny, tylko jakaś bzdura. Bardzo proszę o wskazówki, gdzie popełniłam błąd.

#include <iostream>

using namespace std;

int main()
{
    int tab[5];

    for(int i=1; i<=5; i++)
    {
        cout<<"Podaj "<<i<<" cyfre"<<endl;
        cin>>tab[i];
    }

    for(int j=1; j<=5; j++)
    {
        cout<<"\t"<<tab[j];
    }
    for(int k=1; k<=5; k++)
    {
        cout<<"\n"<<tab[k];

        for(int h=1; h<=5; h++)
        {
            cout<<"\t"<<tab[k]*tab[h];
        }
    }

    return 0;
}

screenshot-20170725150427.png

1
int tab[5]

Wychodzisz poza zakres tablicy. Albo zwieksz liczbe elementów do 6 przy deklaracji albo iteracje zaczynaj od 0.

1

Bo tablic arr[5] ma 5 elementów o indeksach od 0 do 4.

1

@kenik @szweszwe
Fakt, teraz działa. Dziękuję wam bardzo!

1 użytkowników online, w tym zalogowanych: 0, gości: 1