Pętle - Problem z napisaniem programu.

Pętle - Problem z napisaniem programu.
P1
  • Rejestracja:prawie 4 lata
  • Ostatnio:około 3 lata
  • Postów:3
0

Mam takie zadanko do wykonania jestem ciekawy jak zrobić je poprawnie czy jest ktoś wstanie mi pomóc ??

Napisz program nominals, który wczytuje ze standardowego wejscia nieujemna liczbe całkowita i wypisuje
na standardowe wyjscie wszystkie mniejsze od niej liczby postaci 1, 2, 5, 10, 20, 50,... Program załacza
tylko plik nagłówkowy iostream.

Przykładowe wykonanie
In: 1000
Out: 1 2 5 10 20 50 100 200 500

kq
Moderator C/C++
  • Rejestracja:prawie 12 lat
  • Ostatnio:2 minuty
  • Lokalizacja:Szczecin
3

Pewnie, chętnie pomożemy. Czy masz jakiś konkretny problem?


P1
  • Rejestracja:prawie 4 lata
  • Ostatnio:około 3 lata
  • Postów:3
1

Dla liczby 1000 mi działa ale jak wpisze inną liczbę to się gubi i nie wypisuje ich dobrze.

Kopiuj
#include <iostream>

int main() {

	int liczba;
	liczba > 0;
	std::cin >> liczba;

	for (liczba = 1; liczba < 2; liczba++) {
		std::cout << liczba << std::endl;
		
		for (liczba = 2; liczba < 5; liczba++) {
			liczba % 2;
			std::cout << liczba << std::endl;
			
			for (liczba = 5; liczba < 10; liczba++) {
				liczba % 5;
				std::cout << liczba << std::endl;
				
				for (liczba = 10; liczba < 20; liczba++) {
					liczba % 10;
					std::cout << liczba << std::endl;
					
					for (liczba = 20; liczba < 50; liczba++) {
						liczba % 20;
						std::cout << liczba << std::endl;
						
						for (liczba = 50; liczba < 100; liczba++) {
							liczba % 50;
							std::cout << liczba << std::endl;
							
							for (liczba = 100; liczba < 200; liczba++) {
								liczba % 100;
								std::cout << liczba << std::endl;
								
								for (liczba = 200; liczba < 500; liczba++) {
									liczba % 200;
									std::cout << liczba << std::endl;
									
									for (liczba = 500; liczba < 1000; liczba++) {
										liczba % 500;
										std::cout << liczba << std::endl;
										system("pause");
									}
								}
							}
						}
					}
				}
			}
		}
	}

}
edytowany 1x, ostatnio: kq
MarekR22
po kiego grzyba potrzebne ci aż tyle pętli for?
AK
Trudno to w ogóle komentować. Programowanie stochastyczne
AK
  • Rejestracja:prawie 7 lat
  • Ostatnio:około miesiąc
  • Postów:3561
2
programer121 napisał(a):

Dla liczby 1000 mi działa ale jak wpisze inną liczbę ...

A przeczytaj, co robisz ze zmienną 'liczba' co robi ze zmienną liczba ten, kto to napisał

ps. widziałeś choć raz, przez ramię kolegi, jakiś podręcznik ?


Bo C to najlepszy język, każdy uczeń ci to powie
edytowany 1x, ostatnio: AnyKtokolwiek
kq
Moderator C/C++
  • Rejestracja:prawie 12 lat
  • Ostatnio:2 minuty
  • Lokalizacja:Szczecin
1

Ok, cały ten wywal i napisz od nowa. Jeśli nie wiesz co robisz źle, to zacznij od napisania kodu, który wczytuje liczby i je wypisuje (wszystkie) niezależnie od ich wartości.


Althorion
Moderator C/C++
  • Rejestracja:prawie 10 lat
  • Ostatnio:około 2 godziny
  • Postów:1607
2

liczby postaci 1, 2, 5, 10, 20, 50

Jaka to ma być postać? Iloczyn jedynki, dwójki albo piątki z potęgą dziesiątki?

AK
  • Rejestracja:prawie 7 lat
  • Ostatnio:około miesiąc
  • Postów:3561
2
Althorion napisał(a):

liczby postaci 1, 2, 5, 10, 20, 50

Jaka to ma być postać? Iloczyn jedynki, dwójki albo piątki z potęgą dziesiątki?

Chyba układ monet / banknotów w Polsce - tam jest nazwa nominals.

Za czasów gotówki były zupełnie realne podobne zagadnienia, ile jakich nominałów zamówić z banku na wypłatę dla całej załogi. Każdy porządny system musiał to mieć.
Gdyby w zadaniu OP było o drobnej rzeczy: mnożniku, i podaniu kilku słów uściślenia, to mogłoby być trochę podobne


Bo C to najlepszy język, każdy uczeń ci to powie
edytowany 2x, ostatnio: AnyKtokolwiek
AK
  • Rejestracja:prawie 7 lat
  • Ostatnio:około miesiąc
  • Postów:3561
0
programer121 napisał(a):

Dla liczby 1000 mi działa

Nieprawda, panie @programer121
W ogóle program nie zależy od podanej na wejściu liczby


Bo C to najlepszy język, każdy uczeń ci to powie
edytowany 1x, ostatnio: AnyKtokolwiek
enedil
Zepsuty zegar dwa razy na dobę wskazuje dobry czas xD
SI
  • Rejestracja:prawie 14 lat
  • Ostatnio:około 11 godzin
0

@programer121: zastanów się jak zrobił byś takie zadanie "na kartce". I co np dla 50? wyświetlić 50 czy nie?

_13th_Dragon
  • Rejestracja:prawie 20 lat
  • Ostatnio:9 dni
0
Kopiuj
#include <iostream>
#include <array>
#include <cmath>
using namespace std;

int main()
{
	int max;
	array<int,3> tb {1,2,5};
	cin>>max;
	for(int ones=floor(log10(max/5)+1);ones--;) for(int i=0;i<tb.size();tb[i++]*=10) cout<<tb[i]<<endl;
	for(int i=0;i<tb.size()-1;++i) if(tb[i]<=max) cout<<tb[i]<<endl;	
	return 0;
}

Wykonuję programy na zamówienie, pisać na Priv.
Asm/C/C++/Pascal/Delphi/Java/C#/PHP/JS oraz inne języki.
SI
Tylko iostream z nagłówków
SI
O ile dobrze rozumiem warunki zadania, cmath i array nie przejdą.
TomaszLiMoon
  • Rejestracja:prawie 10 lat
  • Ostatnio:dzień
  • Postów:530
1
Kopiuj
void printSequence( size_t max_number )
{
    size_t number {1}, index {1};

    while( number < max_number )
    {
        cout << number << ' ';
        number = 2 * number + ( ++index%3 ? 0 : pow(10,index/3-1) );
    }
}
PerlMonk
  • Rejestracja:około 6 lat
  • Ostatnio:około 3 lata
  • Lokalizacja:Warszawa 🐪
  • Postów:1719
2

@programer121: Może jednak zacznij od początku. Twój kod wygląda jakbyś nie rozumiał problemu.
Skoro lista nominałów jest z góry znana, możesz ją wpisać do kodu na stałe.

Kopiuj
#include <iostream>

int nominals[] = {1, 2, 5, 10, 20, 50, 100, 200, 500};

int main() {
	//Pozostaje uzupełnić

	return 0;
}

Co trzeba zrobić?

  1. Wczytać liczbę
  2. Sprawdzić czy wpisana liczba jest dodatnia - inaczej nie ma sensu działać dalej.
  3. Jeśli podana liczba jest większa od 1 to:
  • porównujemy ją z każdą liczbą w tablicy nominals
  • jeśli wpisana liczba jest większa od nominału, wypisujemy nominał
  • w przeciwnym razie przerywamy pętlę

Opisałem całe rozwiązanie. Pozostaje teraz napisać kod. Jeśli dalej nie wiesz co zrobić, to pewnie nie rozumiesz zadania. Wszystko trzeba sobie rozpisać na kroki.


Nie sztuka uciec gdy w dupie sztuciec. 🐪🐪🐪
edytowany 1x, ostatnio: PerlMonk
PanamaJoe
  • Rejestracja:ponad 4 lata
  • Ostatnio:około 3 lata
  • Postów:310
2
programer121 napisał(a):

Mam takie zadanko do wykonania jestem ciekawy jak zrobić je poprawnie czy jest ktoś wstanie mi pomóc ??

Napisz program nominals, który wczytuje ze standardowego wejscia nieujemna liczbe całkowita i wypisuje
na standardowe wyjscie wszystkie mniejsze od niej liczby postaci 1, 2, 5, 10, 20, 50,... Program załacza
tylko plik nagłówkowy iostream.

Po pierwsze. Zanim zaczniesz bawić się w programowanie. Przestań korzystać z tego źródła z którego pochodzi to zadanie. To zadanie sformułował kretyn. To jest bełkot którego nie da się w jednoznaczny sposób przełożyć na wymagania formalne. Jeśli to są studia / bootcamp to natychmiast się wypisz. Jak się będziesz uczył od kretynów to sam zostaniesz kretynem.


A poza tym sądzę, że bootcampy należy zniszczyć.
TomaszLiMoon
Możliwe, że jest to tylko część zadania, którą OP zamieścił na forum. Reszta jest niczym niewypowiedziane słowa żony "Domyśl się!"
  • Rejestracja:ponad 8 lat
  • Ostatnio:dzień
  • Postów:156
0
programer121 napisał(a):

na standardowe wyjscie wszystkie mniejsze od niej liczby postaci 1, 2, 5, 10, 20, 50,... Program załacza
tylko plik nagłówkowy iostream.

czyli nie ma limitu nominałów

Kopiuj
#include <iostream>

using namespace std;

int main() {
 int n;
 cout << "Podaj N: ";
 cin >> n;
 int i = 1;
 while(n > 1) {
  if(n >= 1) cout << 1 * i << " ";
  if(n >= 2) cout << 2 * i << " ";
  if(n >= 5) cout << 5 * i << " ";
  n /= 10;
  i *= 10;
 }
 cout << "\n";
}

SI
Banknot 800 zł proponują więc z tą automatyką bez przesady.
Lakier
  • Rejestracja:ponad 4 lata
  • Ostatnio:ponad 3 lata
  • Postów:2
0
Kopiuj

#include <iostream>

int main() {

    const int size = 3;
    const int max = 2001;
    const int arr [size] = {1, 2, 5};

    int i, d, value;
    i = d = value = 1;

    while (value < max) {
      std::cout << value << '\n';
      value = arr[i] * d;
      if (2 == i++) { d *= 10; }
      i %= size;
    }

}

enedil
  • Rejestracja:prawie 12 lat
  • Ostatnio:około 18 godzin
  • Postów:1027
2

Prześcigacie się w podpowiedziach, a OP zapewne nigdy tu już w wątku nie napisze.

PerlMonk
Przyzwyczaiłem się. Bynajmniej nie pisał, że "czeka na odpowiedzi do jutra do dwudziestej" ;)
Lakier
W takim razie mam usunąć poprzedni post żeby nie zajmował miejsca?
kq
Ostatnio: 38 minut - kto wie
PerlMonk
@Lakier: Modek nawet offtopu nie usunął, więc luz. Chyba...

Zarejestruj się i dołącz do największej społeczności programistów w Polsce.

Otrzymaj wsparcie, dziel się wiedzą i rozwijaj swoje umiejętności z najlepszymi.