Pętle - Problem z napisaniem programu.

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

3

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

1

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

#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");
									}
								}
							}
						}
					}
				}
			}
		}
	}

}
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 ?

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.

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?

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

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

0

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

0
#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;
}
1
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) );
    }
}
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.

#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.

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.

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

#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";
}

0

#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;
    }

}

2

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

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