Nie potrafię sobie poradzić z zadaniem – prośba o pomoc

0

Witam zaczynam naukę programowania i moje zdolności nie są wybitne dopiero zaczynam. Postanowiłem że zrobię program który będzie dla mnie przydatny ale chyba za wysoko się oceniłem z moimi zdolnościami :D.

Mianowicie chcę stworzyć program który ułatwi mi obliczanie respu chempionów w grze w która aktualnie sobie pogrywam. chodzi o to ze mechanika gry polega na tym ze po zabiciu chempiona jego czas na ponowny resp wynosi określoną jednostkę czasu np mając 2 informacje czyli śmierć tego chempa np 12h,31minut i jego resp który wynosi np 1h,30minut będziemy wiedzieć że następne jego pojawienie będzie o 14h,01minut w dodatku chce zrobić pętle która pokazuje wszystkie możliwe kombinacie dnia np 14,01+1,30 i tak aż do 24h. ja zrobiłem jakis tam program ale nie umie przeskoczyć umiejętnościowo tego że 0,30h + 0,40h równa się 1h,10 a nie 0,70h. Moja wiedza nie umie tego przeskoczyć. mój program działa skopiuje go poniżej ale tylko wtedy kiedy są dokładne godziny np 2+2=4 ,6,8 itd ale jak zrobić to żeby program pokazywał tez minuty i żeby wiedział że 0,30+0,30=1 ? jeżeli ktoś może mi pomóc z góry dziękuje i pozdrawiam :D

#include <iostream>

using namespace std;
int chempion,resp;
int main()
{
    cout << "Wpisz godzine respu chempiona: ";
    cin>> chempion;
    cout<< "wpisz za ile ma sie pojawic: ";
    cin>> resp;

    for(int i=chempion;i<=24;i=i+resp)
    {
        cout<<i<<endl;
    }

    return 0;
}
1

mktime

A call to this function automatically adjusts the values of the members of timeptr if they are off-range or -in the case of tm_wday and tm_yday- if they have values that do not match the date described by the other members.

2

Możesz też spróbować skorzystać z dobrodziejstw C++11 czyli std::chrono. Przykład:

#include <iostream>
#include <chrono>
#include <ctime>

void print_respawn_time(int hh, int mm)
{
    using ClockT = std::chrono::system_clock;
    auto now = ClockT::now();
    auto timenow = ClockT::to_time_t(now);
    
    std::cout << "Time now: " << std::ctime(&timenow) << std::endl; 

    std::chrono::hours h{hh};
    std::chrono::minutes m{mm};
    
    auto respawn = now + h + m;
    auto timerespawn = ClockT::to_time_t(respawn);
    std::cout << "Time respawn: " << std::ctime(&timerespawn) << std::endl; 
}

int main()
{
    print_respawn_time(1, 30);
    return 0;
}
1

Przecież tu nie ma nic do czego potrzebowałbyś doświadczenia w programowaniu. Wystarczy matematyka.

Albo pracujesz na godzinach albo na minutach.
Np.
10:15 = 10 + 15/60 = 10,25 godzin
10:15 = 10*60 + 15 = 615 minut

Mistrzm napisał(a):

0,30h + 0,40h równa się 1h,10 a nie 0,70h

a = 0,30h = 0,3 * 60 = 18 minut
b = 0,40h = 0,4 * 60 = 24 minuty
c = 0,70h = 0,7 * 60 = 42 minuty = a + b

natomiast

x = 30 minut = 0,50 godz.
y = 40 minut = 0,67 godz.
z = x + y = 70 minut = 1,17 godz.
1

#include <iostream>

using namespace std;
double chempion,resp;//ważne
int main()
{


	int x,x2,e;
	double y,y2,k2,k;
    cout << "Wpisz godzine respu chempiona: ";
    cin>> chempion;
    x=chempion;//kożystanie z właściwości int i double
    y=chempion;
    y=y-x;
    y=y * 5/3;
    cout<< "wpisz za ile ma sie pojawic: ";
    cin>> resp;
    x2=resp;
    y2=resp;
    y2=y2-x2;
    y2=y2 * 5/3;// matematyka :)
    for(double i=x+y;i<=24;i=i+x2+y2)
    {
    	e=i;
    	k=i;
    	k=k-e;
    	
      cout<<((i-k)+(k*3/5))<<endl;//matematyka na odwrót
    }
//liczby wprowadzaj z kropką nie przecinkiem
    return 0;
}

1
#include <iostream>

using namespace std;
double chempion,resp;//ważne
int main()
{
	int x,x2,e;//kilka zmiennych całkowitycz
	double y,y2,k2,k;//kilka zmiennych zmiennoprzecinkowych
    cout << "Wpisz godzine respu chempiona: ";
    cin>> chempion;//wprowadzamy wartość double np 12.50 która jest tak traktowana jako 12 i połowa
    x=chempion;//kożystanie z właściwości int i double czyli tego że int zapisze tylko część całkowitą a double całą liczbe.Czyi tutaj mamy wartość 12 bo 0.5 jest niecałkowita
    y=chempion;//tutaj mamy double czyli całą liczbę 12.50
    y=y-x;//jeżeli odejmiemy 12.50-12 otrzymujemy 0.5;
    y=y*5/3;//tutaj jak wspominałem obliczamy stosunek w zapisie 1/0.6 i mnożymy otrzymujemy wartość ok 0.8(3).
    cout<< "wpisz za ile ma sie pojawic: ";
    cin>> resp;
    x2=resp;// dokładnie tak jak wcześniej
    y2=resp;
    y2=y2-x2;
    y2=y2*5/3;// matematyka :)
    for(double i=x+y;i<=24;i=i+x2+y2)//i dajemy wartość początkową x czyli 12 bo to int + y które teraz to 0.8(3) 
    {
    	e=i;//typ int aby wziąść całkowitą część liczby czyi 12
    	k=i;//tu przypisanie całej liczby czyli 12.8(3)
    	k=k-e;//wyliczenie całkowitej części typu double 12.8(3)-12
        cout<<((i-k)+(k*3/5))<<endl;// obliczenie 12.8(3)-0.8(3)  +  k czyli 0.8(3) * 3/5 czyli odwrócenie wcześniejszego działania i wynik 12.50 wynik nie zmienił się bo nie było żadnego przesunięcia.
    }

    return 0;
}



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