Skocz do zawartości

Zarchiwizowany

Ten temat jest archiwizowany i nie można dodawać nowych odpowiedzi.

TheEquinoxe

C++ pomoc z zadaniami

Polecane posty

Witam, otóż mam do wykonania kilka zadań z programowania. Niestety nasz nauczyciel troszkę nas olewa, a sam nie daję rady zrobić tych zadań poprawnie.

"Użytkownik wprowadza 3 liczby, podaj je w kolejności rosnącej" Tutaj jestem w stanie znaleźć największą ale nie jestem w stanie dojść jak wyświetlić je w kolejności.

"Bartek ma 500zł a Kasia ma 600zł na koncie. Po pewnym czasie dzieci sprawdziły swoje konta i

stwierdziły, że mają więcej pieniędzy. Bartek o 24%, a Kasia 15% więcej pieniędzy. Napisz program,

który wyświetli stan konta oraz które dziecko ma więcej pieniędzy."

Tutaj w ogóle czarna magia. Głowiliśmy się z kumplami ale do niczego nie doszliśmy. Proszę o pomoc w wykonaniu. Z góry dziękuję.

PS. Mam nadzieję, że dobry dział, jeśli nie to proszę o przeniesienie.

Link do komentarza
Udostępnij na innych stronach

Zadanie pierwsze:

możesz to zrobić na 2 sposoby: posortować te liczby :D, albo napisać kilka if-ów.

Robisz tak:

wczytujesz a b c

szukasz najwiekszej, zapamiętując która to była (np możesz ustawić jej wartość na -nieskończoność*, wypisujesz ja.

Znowu szuaksz największej, znowu ją wypisujesz. wypisujesz ostatnią. już.

albo jak jesteś leniwy i nauczyciel przłknie cos takiego to:

#include <algorithm>

wczytaj dane_do_tablicy

sort (tablica,tablica+3)

wypisz tablica[0] tablica[1] tablica[2]

już

A drugie zadanie to na kartce policz i tylko napisz wypisywanie liczby, to nie ma nic związanego z informatyką.

No dobra, pewnie musisz to obliczyć komputerowo, ale naprawde, w tym nie ma żadnej magii, napewno miałeś na matmie zadania typu "stefan ma 100zl. Po miesiącu miał o 10% więcej. Ile ma teraz?" więc to jest dokładnie to samo.

*w C++ nie ma czegoś takiego jak nieskończoność jako taka, ale zmienne mają zakresy, więc ustawiasz ją na najmniejszą możliwą wartość i masz taką "udawaną nieskończoność.

Link do komentarza
Udostępnij na innych stronach

tutaj masz 2 zadanie, strasznie proste ;d

#include <iostream.h>

#include <conio.h>

using namespace std;

int main ()

{

int bartek, kasia;

bartek=500;

kasia=600;

bartek+=0.24*bartek;

kasia+=0.15*kasia;

cout<<"Stan konta Bartka : "<<bartek;

cout<<"\nStan konta Kasi : "<<kasia<<endl;

if (kasia>bartek) cout<<"Kasia ma wiecej pieniedzy";

else cout<<"Bartek ma wiecej pieniedzy";

getch();

return 0;

}

Link do komentarza
Udostępnij na innych stronach

Troche pokory, najpierw zrob zadanie poprawnie, a potem mow, ze proste.

Pieniadze to nie liczby calkowite, powinny byc double zaokraglone do drgiego miejsca po przecinku.

po drugie jak mnozysz inta przez liczbe zmiennoprzecinkowa to lepiej przezutowac inta na double a potem znowu na int (ewentualnie)

Link do komentarza
Udostępnij na innych stronach

nie ma to jak pomóc i zostać pociśnięty ;d

zadanie jest proste, dalej tak sądzę, a zrobiłem to w najprostszy z możliwych sposób, aby mu pokazać, o co chodzi, bo z tym miał problem. Przecież nigdzie nie napisałem, że ma oddać nauczycielowi w takim stanie, zmienianie tych typów itp moze sobie przeciez sam zrobic. Wiec nie wiem po co ta spina i udawanie programistycznego koksa z twojej strony :3

To jest kwestia zwykłej uczciwości. Powinniśmy pomagać, a nie odwalać za kogoś robotę.

[wies.niak]

Link do komentarza
Udostępnij na innych stronach

Spina Hakkena słuszna, bo złe nawyki w pisaniu programów, pół biedy, że Tobie utrudnią w przyszłości życie, ale niech ten kod dostanie potem ktoś inny, to skutki będą potraktowane jako zabójstwo w afekcie :P

Rozwiązanie czegoś w sposób najprostszy, nie oznacza, że jest on poprawny. No i wogóle najprościej to by było zrobić tak jak ktoś wyżej wspomniał. Policzyć, to i walnąć jednego cout'a :P

Link do komentarza
Udostępnij na innych stronach

Pieniadze to nie liczby calkowite, powinny byc double zaokraglone do drgiego miejsca po przecinku.

Jeśli w zadaniu mamy podane dwie liczby podzielne przez 100, to nie ma sensu kombinować ze zmienną double i wypisywać liczby do drugiego miejsca po przecinku. Wystarczy wczytać te dwie liczby i podzielić je przez 100, a następnie pomnożyć przez ilość procentów+100.

Czyli na przykład: 600:100=6 potem 6*(100+15)=690

(oczywiście można się czepiać, że ten program dla 498 zł i 15, 435687 % policzy, źle, ale równie dobrze można się wtedy czepiać, że zamiast 500, 600 zł są liczby 1000000000000000000, 2000000000000000000 i trzeba pisać dodawanie big numów na stringach, bo int jest za mały) :P

Link do komentarza
Udostępnij na innych stronach

@sposob zauwazajacy, ze liczby dziela sie przez 100

To juz zwykla heurystyka i nie widze zadnego logicznego powodu, zeby robic to w ten sposob. chciaz nie da sie ukryc ze wynik bedzie poprawny ;)

@goraal

nie przecze, ze zadanie jest latwe, ale na nonszalancje trzeba sobie zapracowac. Powiedzenie "phew, banalne!" i zrobienie zadania nie do konca poprawnie stawia Cie... w nienajlepszym swietle.

@hrabula

to morderstwo to raczej w samoobronie :P

Link do komentarza
Udostępnij na innych stronach

@sposob zauwazajacy, ze liczby dziela sie przez 100

To juz zwykla heurystyka i nie widze zadnego logicznego powodu, zeby robic to w ten sposob. chciaz nie da sie ukryc ze wynik bedzie poprawny ;)

Heurestyka jest pojęciem względnym. ( Sortowanie 3 liczb bez użycia stlowego sorta lub pętli też można uznać za heurystykę, ale co jeśli się ich jeszcze nie poznało?)

Link do komentarza
Udostępnij na innych stronach

Nie rozimiem dlaczego uwazasz porownywanie 3 liczb if-ami za heurystyke. To jest w pelni dzialajacy i deterministyczny sposob. Wspomnialem o algorytmach sortujacych a takze STL, poniewaz zadko zdarza sie, ze musimy posortowac akurat 3 liczby. a dzieki temu ze wspomnialem o sortowaniu moze sklonie kogos do poczytania na ten temat, w dodatku bedzie wiedzial taki ktos jak posortowac 3,4...n liczb. edukacyjne podejscie do problemu ;)

heurystyka wzgledna ? nie powiedzialbym. Jest to raczej jasno zdefiniowane pojecie

EDIT:

@ goraal

Pozwól, że cię zcytuję:

tutaj masz 2 zadanie

Imo to jest dość równoznaczne z powiedzeniem:

Proszę, o to zrobione drugie zadanie.

Nie widze, żebyś mu coś tłumaczył pokazywał algorytm czy coś takiego.

Link do komentarza
Udostępnij na innych stronach

@Hakken

bardziej mialem na mysli "jakim sposobem zrobic 2 zadanie", niż "oto bezbłędnie wykonane 2 zadanie", ale who cares?

zachowujesz się jakbyś nie miał nic innego do roboty jak hejtowanie innych userow, a przeciez chcialem tylko pomoc ;d wiec moze zamiast czepiać się mnie powinieneś mu to sensownie wytłumaczyć, mózgu? bo z tego co predzej pisales to watpie, ze cokolwiek zrozumial, jak widac dopiero zaczyna przygode z programowaniem (podobnie jak ja :) ), wiec pomoc typu :

albo jak jesteś leniwy i nauczyciel przłknie cos takiego to:

#include <algorithm>

wczytaj dane_do_tablicy

sort (tablica,tablica+3)

wypisz tablica[0] tablica[1] tablica[2]

już

na niewiele mu się zda. Łatwiej mu będzie przeanalizować to co ja napisałem i napisać to po swojemu z double'ami i cala reszta. Przynajmniej mi zawsze łatwiej było nauczyć się w taki sposob.

Link do komentarza
Udostępnij na innych stronach

Po pierwsze: regulamin

> Dział ma pomagać w rozwiązywaniu problemów, a nie rozwiązywać ich za pytających.

Po drugie: wyjaśnij dlaczego twiedzisz, że zaproponowany przeze mnie sposób porównywania 3 liczb w if-ach to heurystyka.

EDIT @up

Nie uważam, żeby zamieszczanie pełnego kodu, z błędem było pomocne. Nie napisałeś, że należy coś zmienić. Skąd więc autor miałby się domyślić, że cokolwiek ma zmieniać ?

Nie wiem czy zauważyłeś, ale o STL i algorytmach sortujących tylko wspomniałem - dlatego, że jest to rozwiązanie poprawne i optymalne. Jest to forum publiczne, więc ktoś oprócz autora może to czytać, a błazenadą byłoby nie wspomnienie o sortowaniu liczb przy takim problemie. Skupiłem się jednak, i dokładnie opisałem inny, prostszy, bardziej łopatologiczny sposób.

Link do komentarza
Udostępnij na innych stronach

@Hakken

Łatwiej mu będzie przeanalizować to co ja napisałem i napisać to po swojemu z double'ami i cala reszta. Przynajmniej mi zawsze łatwiej było nauczyć się w taki sposob.

I właśnie o to chodzi. Hakken, czy ty od początku byłeś taki super umiałeś wszystko napisać i nie miałeś nigdy błędów kompilacji. Nie wydaje mi się ;)

@EDIT: to ty zacząłeś temat heurystyki. Jak ktoś zaczyna programować to na początku ważne jest zwracanie dobrych wyników, a potem inne rzeczy. Nie zaczynasz nauki jazdy na nartach od czerwonej trasy tylko od oślej łączki. Tak samo jest z programowaniem :P

Link do komentarza
Udostępnij na innych stronach

Nie.

- Rozwiazanie zadania samemu daje zdecydowanie większe profity niż skopiowanie / lekkie zmodyfikowanie istenijącego kodu.

- Uczenie się czegoś błędnego (co niestety uskutucznie szkolnictwo, ale nie o tym jest dyskusja) prowadzi do katastrofy. Opóźnia, utrudnia rozwój, a także, o czym pisał Lord Hrabula, uczy złych nawyków.

Co do mnie: kiedy nie wiedziałem jak coś zrobić to siadałem i myślałem. I myślałem aż wymyśliłem. Jak nie odrazu, to potem. W drodze do szkoły, w czasie obiadu etc. Podanie komuś gotowego rozwiązania jest jedną z największych krzywd jakie można zrobić uczącemu się.

EDIT

@ Heurystyka

Dalej nie rozumiem, dlaczego sposób z ifami uznajesz za heurystykę.

A co do poprawnych wyników... Nie ma co uskuteczniać dziadostwa - nad każdym problemem trzeba się zastanowić, znaleść optymalny sposób na rozwiązanie, implementacje. Czasami jest to właśnie heura. Jest to jednak trudne zagadnienie i wymaga troche doświadczenia i wyczucia - kiedy optymalizacja czasu kosztem dokładności jest akceptowalna i opłacalna.

Link do komentarza
Udostępnij na innych stronach

#include <algorithm>

wczytaj dane_do_tablicy

sort (tablica,tablica+3)

wypisz tablica[0] tablica[1] tablica[2]

A to co ty podałeś to może nie jest gotowiec? Jak zamiast cin i cout wpisałeś wczytaj, wypisz to już z tego więcej się da nauczyć? Dodaję jeszcze iostreama, nawiasy, pauzę i mam gotowy program. I można tak zrobić bez rozumienia co tak właściwie ten program robi.

Link do komentarza
Udostępnij na innych stronach

Uważam, że algorytm polegający na użyciu kliku ifów omówiłem wystarczająco dobrze, aby naprowadzić autora na trop rozwiązania zadania, podsunąc mu algorytm. Jeśli nie było wystarczająco jasno - zawsze można napisać, że coś jest niejasne, to bym omówił dokładniej.

Tak jak już pisałem wyżej - absurdem byłoby przy takim problemie nie wspomnieć o sorcie z STL lub implementowalnym własnoręcznie.

Link do komentarza
Udostępnij na innych stronach

Uważam, że nie powiedzenie o STL-u jest tak dużym niedopowiedzeniem, że aż błędem. Czy jest to gotowiec ? W pewnym sensie tak, jednak właśnie taka jest istota STL-a, wyręczanie programisty w kodzeniu użytecznych i trudnych w kodzeniu struktur i algorytmów, czyż nie ?

Przypominam znowu, że omówiłem algorytm oparty na if-ach. To jest jak najbardziej możliwe do własnoręcznej implementacji, nawet przez nowicjusza.

Link do komentarza
Udostępnij na innych stronach

ok, teraz już dokładnie widać, że wolisz obrzucać błotem innych userów, niż naprawdę pomóc.

Więc apel do wszystkich : Don't feed the tr... HATER!

Jeśli jeszcze raz zobaczę coś takiego, to stanę się niemiły.

Jeśli chodzi o sam problem, to reguły działu są jasne. Możemy pomóc komuś rozwiązać problem, ale nie będziemy nikogo wyręczać. Czemu? Bo to nie ma sensu. Co z tego, że odrobimy za kogoś zadanie domowe, skoro potem i tak to wyjdzie. Podając gotowe rozwiązania tylko szkodzisz osobie, której chcesz pomóc.

Link do komentarza
Udostępnij na innych stronach

Ja bym się przyczepił do zastosowania typu double.

1) Pieniądze wbrew pozorom są wyjątkowo całkowite. Nie da się reprezentować przy użyciu pieniędzy liczb ułamkowych. W Polsce najmniejszą jednostką jest jeden grosz. Nic mniejszego nie da się wyrazić. Owszem moglibyśmy sobie zapisać jakiś tam ułamek grosza, ale w praktyce spotkałem się z tym, że banki zaokrąglają do pełnych groszy.

2) Precyzja obliczeń. Jeżeli zaczniemy liczyć dostatecznie duże kwoty to się okaże, że zaczynamy gubić najmniej znaczące cyfry. Mowa o ~14 cyfrowych liczbach (w tym ułamek). Problemem jest to, że stanie się to w zasadzie bez ostrzeżenia. W przypadku liczb całkowitych zostanie wykryte przepełnienie.

Najbezpieczniej jest przechowywać dane finansowe jako stringi i tak też wykonywać operacje. Oczywiście w przypadku tak prostego zadania w ogóle nie ma sensu zawracać sobie głowy, wystarczy unsigned short.

Link do komentarza
Udostępnij na innych stronach



  • Kto przegląda   0 użytkowników

    • Brak zalogowanych użytkowników przeglądających tę stronę.
×
×
  • Utwórz nowe...