programik
Benny: Ktoś chętny napisać mały programik w C?
26 kwi 19:03
Damian: zalezy jak mały
26 kwi 19:05
Benny: Bankomat dysponuje banknotami o nominałach: 200, 100, 50, 20 i 10 złotych. Napisz program,
który wczyta liczbę naturalną n oznaczającą kwotę (w złotych) żądaną do wypłaty przez
użytkownika. Jeśli liczba n jest podzielna przez 10, to program powinien wypisać ile należy
wypłacić banknotów o poszczególnych nominałach (tak, aby liczba wszystkich wypłaconych
banknotów była najmniejsza z możliwych). Np. gdyby n=670, to program powinien wypisać: 3*200
zł, 1*50 zł, 1*20 zł i zakończyć działanie. Gdyby natomiast liczba n nie była podzielna przez
10, to program powinien poinformować użytkownika, że kwota musi być podzielna przez 10 i
wczytać kolejną liczbę wpisaną przez użytkownika. W razie gdyby trzykrotnie użytkownik błędnie
wpisał kwotę, to program powinien zakończyć działanie.
26 kwi 19:09
olekturbo: Koniecznie w C czy może być C++?
26 kwi 19:11
Benny: C byłoby spoko
26 kwi 19:17
Mariusz:
Potrzebny będzie całkowity licznik wczytań liczby ,
pięć zmiennych całkowitoliczbowych bądź tablica pięcioelementowa i dzielenie z resztą
Jeśli to ma być w C to printf i scanf będą przydatne
W C oraz C++ praktycznie nie ma funkcji do obsługi konsoli
(tylko stare środowiska Borlandowskie miały jako taką obsługę konsoli
ale to nie jest w standardzie)
26 kwi 19:29
Benny: zmienne int n, a, b, c, d, gdzie:
a=n/200;
b=(n−a*200)/100;
itd?
26 kwi 19:37
Mariusz:
Ja za a bym przyjął resztę z dzielenia przez 200
a iloraz tego dzielenia zapisał w zmiennej przechowującej liczbę banknotów
o nominale 200
W następnym kroku sprawdzałbym liczbę banknotów o nominale 100
W tych pięciu zmiennych przechowujesz liczbę banknotów o danych nominałach
26 kwi 19:44
Benny: Gdybyś miał czas chętnie zobaczyłbym to w całości.
26 kwi 19:52
Krzysiek: #include <iostream>
using namespace std;
int nominaly[5]={200,100,50,20,10};
void wypisz(int n){
for(int i=0;i<5;++i){
if(n>nominaly[i]){
cout<<nominaly[i]<<" x "<<n/nominaly[i]<<"\n";
n%=nominaly[i];
}
}
}
int main() {
int n,licznik=0;
cout<<"Wczytaj kwote: ";
cin>>n;
while(n%10!=0){
++licznik;
if(licznik==3){
exit(0);
}
cout<<"Wczytaj jeszcze raz kwote: ";
cin>>n;
}
wypisz(n);
return 0;
}
26 kwi 19:58
Mariusz:
licznik=0;
n=1;
while(licznik<3&&n%10!=0){
printf("Podaj n=");
scanf("%d",&n);
if(n%10!=0) licznik++;
}
a=n/200;
n=n%200;
b=n/100;
n=n%100;
c=n/50;
n=n%50;
d=n/20;
n=n%20;
e=n/10;
26 kwi 19:59
Mariusz:
Krzysiek pomysł podobny do mojego
Napisałeś w C++ a miało być w C
26 kwi 20:03
Benny: Trochę nie ogarniam co od czego, ale zaraz spróbuje to rozkminić.
26 kwi 20:04
Benny: Btw. @Krzysiek coś nie poprawnie chyba działa. Wklepałem 550 i źle podało.
26 kwi 20:04
Mariusz:
if(n>nominaly[i])
Tutaj powinien dać nierówność nieostrą
Benny nie przeszkadza ci że jest to napisane w C++ zamiast C
26 kwi 20:16
Krzysiek: Malutki błąd:
w linijce if(n>nominaly[i]){
powinno być if(n>=nominaly[i]){
26 kwi 20:19
Mariusz:
W pętli while można było dać lepszy warunek logiczny
Teraz to wygląda tak jakby Krzysiek był kiepski z logiki
26 kwi 20:20
Benny: W C jest podobnie jak w C++. Chodzi mi trochę o zrozumienie jak działa ten program.
26 kwi 20:40
Krzysiek: Przeważnie problem wydawania reszty rozwiązuje się przy pomocy algorytmu zachłannego
26 kwi 20:46
Benny: Co to jest ten algorytm?
26 kwi 20:52
Krzysiek: algorytm czy algorytm zachłanny?
26 kwi 21:05
Benny: algorytm zachłanny
+n%=nominaly[i] tego zapisu nie czaje
26 kwi 21:13
Mariusz:
% reszta z dzielenia
%= do zmiennej przypisujesz resztę z dzielenia tej liczby przez liczbę po prawej
Zamiast n%=nominaly[i] mógłbyś napisać n=n%nominaly[i]
27 kwi 08:48
Benny: Właśnie nie byłem pewny czy to to samo co n=n%nominaly[i], dzięki
27 kwi 09:12
Mariusz:
Benny sam się uczysz programowania czy masz je na studiach ?
27 kwi 09:45
Benny: Mam na studiach.
27 kwi 21:04
Mariusz:
Pascal do nauki chyba lepszy
Przeglądałeś Cormena (Introduction to Algorithms, Algorithms unlocked)
tam ma kilka pseudokodów które łatwo przepisać ale za to trochę je komplikuje
np (sortowanie stogowe ma z użyciem rekurencji ogonowej,
a w sortowaniu przez scalanie daje wartowników)
Nie wiem czemu większość podnieca się quick sortem przecież
dla list i plików mamy sortowanie przez scalanie a dla tablic sortowanie stogowe
i mamy zapewnione zatrzymanie się algorytmu w czasie O(nlogn)
a czas zatrzymania quick sorta zależy od danych wejściowych
27 kwi 21:23
Evelek: bąbelkowe też fajne.
27 kwi 21:26
Jack: wstawianie znacznie lepsze niz babelkowane, a shell to juz wgl
27 kwi 21:26
Krzysiek: Na studiach takie łatwe zadania?
29 kwi 09:06
Mariusz:
Wiesz jak to dopiero początek , na czymś trzeba ćwiczyć te pętelki i warunki
29 kwi 18:24
kyrtap: dokładnie Mariusz, lepiej na czymś prostszym, aby zrozumieć ideę pętli, później można sobie
utrudniać życie
29 kwi 19:08