Proste i najbardziej podstawowe zadania do wykonania z C++

0

1 Program wczytuje liczby i sumuje je dopóki nie zostanie wczytane zero. Która pętla będzie lepsza w tym zadaniu (while, czy do-while), dlaczego.

2 Program w pętli wczytuje podawane przez Ciebie liczby i mnoży je. Pętla działa dopóki ich iloczyn nie przekroczy 100. Następnie wypisuje iloczyn oraz liczbę wykonań pętli.

3 Program w pętli wczytuje liczby i jeśli są parzyste sumuje je. Program kończy działanie, gdy suma przekroczy 50 lub dodane zostanie 10 liczb.

4 Program w pętli wczytuje liczby i jeśli są parzyste sumuje je. Program kończy działanie, gdy suma przekroczy 50 lub dodane zostanie 10 liczb.

5 Wypisz liczby trzycyfrowe parzyste malejąco.

Mam duże zaległości związane z C++ i sporo zadań do przećwiczenia związanych z tym językiem. Tutaj pokazałem tylko te najbardziej podstawowe, od których chciałbym zacząć, żeby przeanalizować i brnąć z naukąa dalej. Uczę się z różnych poradników na YouTube i mam jedną książkę (symfonię) o C++ ale na razie moje umiejętności wciąż są bardzo powierzchowne ograniczają się do tego, że np. potrafię wykonać bardzo podobny przykład do zadania pokazanego na filmiku; albo np. wyświetlać zdanie po wcześniejszym wczytaniu czegoś wpisanego odpowiednio przez użytkownika. Chciałbym zobaczyć przykłady rozwiązanych zadań powyżej abym mógł je potem przeanalizować.

1
lcbnd1 napisał(a):

1 Program wczytuje liczby i sumuje je dopóki nie zostanie wczytane zero. Która pętla będzie lepsza w tym zadaniu (while, czy do-while), dlaczego.

    #include <iostream>
    using namespace std;
     
    int main() {
    	int suma = 0;
     
    	int skladnik;
    	while(cin >> skladnik && skladnik != 0)
    		suma += skladnik;
     
    	cout << "Suma to " << suma << '\n';
    }

Zatem while jest IMO wygodniejsza ponieważ pozwala w jednej linijce zmieścić wczytanie liczby i warunek.

(Nie wszystkie operacje można wsadzać do warunku pętli w ten sposób, ale operacje wejścia/wyjścia - można. Dodatkowy bonus, którego nie ma w programie niżej: Ten przykład odporny jest na taką sytuację, gdy użytkownik nie poda w ogóle liczb tylko zamknie strumień wejścia - Ctrl+D na Mac/Linux, Ctrl+Z na Windows albo poda programowi pusty plik jako wejście: jeśli operacja wczytania cin >> cośtam była nieudana, to to wyrażenie cin >> cośtam przyjmie wartość tak jakby false.)

do while:

    #include <iostream>
    using namespace std;
     
    int main() {
    	int suma = 0;
     
    	int skladnik;
    	do {
    		cin >> skladnik;
    		suma += skladnik;
    	} while (skladnik != 0);
     
    	cout << "Suma to " << suma << '\n';
    }

Działa, ale tylko dlatego, że warunkiem kończącym wczytywanie jest 0. Zauważ, że w tym programie ostatnia wczytana liczba zostanie dodana do sumy; bez znaczenia, jeśli to 0, ale gdyby w warunku było np. -1 zamiast zera, to program byłby błędny.

2 Program w pętli wczytuje podawane przez Ciebie liczby i mnoży je. Pętla działa dopóki ich iloczyn nie przekroczy 100. Następnie wypisuje iloczyn oraz liczbę wykonań pętli.

    #include <iostream>
    using namespace std;
     
    int main() {
    	int iloczyn = 1;
    	int czynnik;
     
    	int obrotow_petli = 0;
    	while(iloczyn <= 100 && cin >> czynnik) {
    		iloczyn *= czynnik;
    		obrotow_petli++;
    	}
     
    	cout << "Iloczyn przekroczyl 100 z chwila uzyskania wartosci " << iloczyn
    	     << " przy " << obrotow_petli << ". obrocie petli.\n";
    }

3 Program w pętli wczytuje liczby i jeśli są parzyste sumuje je. Program kończy działanie, gdy suma przekroczy 50 lub dodane zostanie 10 liczb.

    #include <iostream>
    using namespace std;
     
    int main() {
    	int suma = 0;
    	int skladnik;
     
    	int posumowanych_liczb = 0;
    	while(suma <= 50 && posumowanych_liczb < 10 && cin >> skladnik)
    		if(skladnik%2 == 0) {
    			suma += skladnik;
    			posumowanych_liczb++;
    		}
     
    	cout << "Uzyskana suma: " << suma << '\n';
    }

Uwaga na błąd o 1: < vs <=

4 Program w pętli wczytuje liczby i jeśli są parzyste sumuje je. Program kończy działanie, gdy suma przekroczy 50 lub dodane zostanie 10 liczb.

Coś Ci się pomieszało, treść tego zadania identyczna z poprzednią

5 Wypisz liczby trzycyfrowe parzyste malejąco.

    #include <iostream>
    using namespace std;
     
    int main() {
    	for (int liczba = 998; liczba >= 100; liczba-=2)
    		cout << liczba << '\n';
    }

Uczę się z różnych poradników na YouTube i mam jedną książkę (symfonię) o C++

Jeśli moje przypuszczenie, że potrzebujesz tej wiedzy do szkoły / na uczelnię jest trafne (naprowadziło mnie na to przypuszczenie słowo "zaległości"), to weź przerób po prostu skrypt / podręcznik.

C++ to olbrzymi język i wiele rzeczy może być robione na wiele sposobów. I chociaż niektóre z tych sposobów są lepsze, a inne gorsze, to jednak w takim wypadku Ty musisz umieć akurat to, czego będą od Cb wymagać, a niekoniecznie to, czego uczy autor danej książki / filmiku na YT.

Chyba, że masz ambicje zdobyć wiedzę szerszą, niż ta wymagana. Wtedy mam jednak mieszane uczucia wzgl filmików na YT.

0
  1. Program wczytuje liczby i sumuje je dopóki nie zostanie wczytane zero.
awk '$0 == 0 { exit }; { sum += $0 }; END { print 0 + sum }'
  1. Program w pętli wczytuje podawane przez Ciebie liczby i mnoży je. Pętla działa dopóki ich iloczyn nie przekroczy 100. Następnie wypisuje iloczyn oraz liczbę wykonań pętli.
awk 'BEGIN { p = 1 }; { p *= $0 }; p > 100 { exit }; END { print p, NR }'

3 Program w pętli wczytuje liczby i jeśli są parzyste sumuje je. Program kończy działanie, gdy suma przekroczy 50 lub dodane zostanie 10 liczb.

awk '$0 % 2 == 0 { sum += $0; ++n }; sum > 50 || n == 10 { exit }; END { print 0 + sum }'

5 Wypisz liczby trzycyfrowe parzyste malejąco.

awk 'BEGIN { for (i = 998; i >= 100; i -= 2) print i }'

Tutaj pokazałem tylko te najbardziej podstawowe, od których chciałbym zacząć [...]

Pokaż kolejne 8-)

0

Jak wykonac dwa pierwsze zadania tak aby cin >> skladnik /cin >> czynnik nie było w nawiasie? Wydaje mi się, że ten drugig sposób jest prostszy w zadaniu z sumą

0
  1. Program wczytuje kolejno liczby całkowite oraz dodaje do siebie tylko liczby
    jednocyfrowe parzyste. Wczytywanie kończy się gdy suma osiągnie lub przekroczy
    20 lub gdy zostanie wczytane 5 liczb. Wypisz:
    • sumę liczb
    • ile liczb zostało dodanych
    • ile liczb zostało wczytanych.

#include <iostream>
using namespace std;

int main() {
    int suma = 0;
    int skladnik;
	
    int posumowanych_liczb = 0;
    while(suma <= 20 && posumowanych_liczb < 5) {
		cin >> skladnik;
        if((skladnik%2 == 0) && (skladnik<10)) {
            suma += skladnik;
            posumowanych_liczb++;
        }

    	cout << "Uzyskana suma: " << suma <<endl << "Zostalo dodanych "<< posumowanych_liczb << " liczb";
	} 
return 0;		
}

Nie wiem jak zapisać, że to mają być liczby jednocyfrowe i nie wiem jak zapisać ile zostało wczytanych liczb.

1
lcbnd1 napisał(a):

Jak wykonac dwa pierwsze zadania tak aby cin >> skladnik /cin >> czynnik nie było w nawiasie? Wydaje mi się, że ten drugig sposób jest prostszy w zadaniu z sumą

Po pierwsze, po co ma nie być w nawiasie?

Po drugie: Jeśli chodzi o pierwsze zadanie, to pokazałem przecież pętlę do while, gdzie nie jest w nawiasie. Jeśli chodzi o drugie zadanie, to wyrzucenie tego polecenia z nawiasu jest trywialne, spróbuj sam to zrobić. Koszt: Program będzie mniej odporny na sytuację, w której brakuje danych wejściowych lub są one niepoprawne.

lcbnd1 napisał(a):

Wczytywanie kończy się gdy suma osiągnie lub przekroczy 20

while(suma <= 20 && posumowanych_liczb < 5)
Na pewno `<=`? Uwaga na błąd o 1, tam jest: **osiągnie** lub przekroczy

> Nie wiem jak zapisać, że to mają być liczby jednocyfrowe

No przecież już to sprawdzasz: `skladnik<10` Jeśli dopuszczamy liczby ujemne, to trzeba jeszcze sprawdzić, czy są większe od -10

> nie wiem jak zapisać ile zostało wczytanych liczb.

No przecież zrób licznik wczytanych liczb i inkrementuj go po każdym `cin`.
0

Po wybraniu opcji 1 program prosi o wczytanie pensji pracownika z dokładnością do 10 zł i wypisuje ile banknotów 200, 100, 50, 20, 10 zł należy wypłacić pracownikowi (tak, by miał jak najmniejszą liczbę banknotów)

W jaki sposób mam zrobić to zadanie kiedy w poleceniu jest "z dokładnością do 10 zł". Czy da się to zrobić na intach? Jest ktoś kto mógłby mi to wytumaczyć . Ta opcja 1 to jest część bardziej rozbudowanego zadania, które składa się na 3 zupełnie różne opcje. Ale chciałbym sam spróboać zrobić całe zadanie na podstawie/ z pomocą krótkiego schematu pokazanego tu.

1
lcbnd1 napisał(a):

Po wybraniu opcji 1 program prosi o wczytanie pensji pracownika z dokładnością do 10 zł i wypisuje ile banknotów 200, 100, 50, 20, 10 zł należy wypłacić pracownikowi (tak, by miał jak najmniejszą liczbę banknotów)

Eee??

Pokaż może całą treść zadania.

Przypuszczam, że chodzi o to, że można założyć, że dane wejściowe będą wielokrotnością 10. Ale nie można być pewnym bez całej treści zadania.

Czy da się to zrobić na intach?

A dlaczego miałoby się nie dać?

0
kmph napisał(a):
lcbnd1 napisał(a):

Po wybraniu opcji 1 program prosi o wczytanie pensji pracownika z dokładnością do 10 zł i wypisuje ile banknotów 200, 100, 50, 20, 10 zł należy wypłacić pracownikowi (tak, by miał jak najmniejszą liczbę banknotów)

Eee??

Pokaż może całą treść zadania.

  1. Zbuduj menu tekstowe:
    a. Po wybraniu opcji 1 program prosi o wczytanie pensji pracownika y dokładnością do 10 zł i wypisuje ile banknotów 200, 100, 50, 20, 10 zł należy wypłacić pracownikowi (tak, by miał jak najmniejszą liczbę banknotów)
    b. Po wybraniu opcji 2 program prosi użytkownika o znak, a następnie sprawdza, czy jest małą literą, dużą litera, czy cyfrą, czy może dowolnym innym znakiem.
    c. Po wybraniu opcji 3 program prosi użytkownika o podanie argumentu funkcji, następnie wypisuje wartość funkcji zadanej wzorem (wzoru nie wyślę, bo jest w formie zdjęcia ale to i tak nie ma większego tutaj znaczenia to może być cokolwiek, myślę, że chodzi tu o zadanie z return)

Czy da się to zrobić na intach?

A dlaczego miałoby się nie dać?
: Generalnie podchwytliwe jest dla mnie to : "z dokładnością do 10 zł". Dlaczego nie 1 zł ? (wtedy byłbym pewien, że to ma być int)

0

Strzelam, że po prostu możesz założyć, że podana kwota będzie wielokrotnością 10.

To jest ułatwienie zadania: nie musisz interesować się monetami 5zł, 2zł, 1zł. O groszach już nie mówiąc. Tylko banknotami musisz się zajmować. (Gdyby nie było tego założenia, no to trzeba by bawić się w monety)

0

Ale jak miałbym zapisać taką deklarację w intach (naprawdę nie rozumiem tego)? Jak to by wyglądało?

0

Nie ma takiego typu, który by statycznie wymuszał, by jego wartości były wielokrotnościami 10. Ale przecież jeśli jest wielokrotnością 10, to w szczególności jest liczbą całkowitą. Int się nada? Nada. Po prostu załóż, że wartości są wielokrotnościami 10. Resztę olej.

Inne opcje: Podziel wczytaną liczbę przez 10. Dalsze obliczenia wykonuj, mając na uwadze, że pensja o wartości 123 tak naprawdę oznacza 1230. W mojej opinii jest to jednak bezsensowne i bezcelowe dokładanie sobie pracy, mnożenie miejsc, w których mogą pojawić się błędy, czynienie kodu nieczytelnym bez odnoszenia z tego żadnych zysków. Nie polecam.

Co mogłoby mieć sens, jeśli chcesz być bardzo correct: Jeśli user poda liczbę, która nie jest wielokrotnością 10, to wypisz komunikat że podał złą liczbę i każ mu podać ją jeszcze raz. Alternatywnie zaokrągl podaną przez usera liczbę do najbliższej wielokrotności 10. Wydaje mi się to jednak nadobowiązkowe.

0

Podziel wczytaną liczbę przez 10. W tym miejscu chciałeś napisaać "pomnóż" zamiast "podziel".? W każdym bądźrazie generalnie lepiej będzie jeśli zadanie wykonam normalnie ;tak jakbym zakładał, że użytkownik po prostu wpisuje liczbę typu 60 / 10 etc. a nie jakieś 16 etc.? I tylko na tym skupił się w tym zadaniu?

0
lcbnd1 napisał(a):

Podziel wczytaną liczbę przez 10. W tym miejscu chciałeś napisaać "pomnóż" zamiast "podziel".?

Nie. Jeśli chcesz się uprzeć, to możesz wczytaną liczbę np. 60 podzielić przez 10 i przechowywać ją w pamięci jako 6. Tak jak pisałem jednak, nie polecam tego, bo potem tylko problemy.

W każdym bądźrazie generalnie lepiej będzie jeśli zadanie wykonam normalnie ;tak jakbym zakładał, że użytkownik po prostu wpisuje liczbę typu 60 / 10 etc. a nie jakieś 16 etc.? I tylko na tym skupił się w tym zadaniu?

Tak bym to widział.

0

#include <iostream>
using namespace std;

int main() {
    int suma = 0;
    int skladnik;
	
    int posumowanych_liczb = 0;
    
    int licznik_wczytanich = 0;
    while(suma == 20 && posumowanych_liczb < 5) {
		cin >> skladnik;
		licznik_wczytanych++;
        if((skladnik%2 == 0) && (skladnik<10) && (skladnik>-10)) {
            suma += skladnik;
            posumowanych_liczb++;
        }

    	cout << "Uzyskana suma: " << suma <<endl << "Zostalo dodanych "<< posumowanych_liczb << " wczytano" << podsumowanych_liczb <<endl;
	} 
return 0;		
}

Jaki mam tutaj błąd? To jest to wcześniejsze zadanie tylko nieco poprawione. Wydaje mi się, że dalej mam tu jakiś trywialny błąd ale naprawdę nie mogę go znaleźć. Ciężko mi jest się oswoić z tym programowaniem :/

0
--- lcbnd1.cpp.orig
+++ lcbnd1.cpp
@@ -7,8 +7,8 @@
 
     int posumowanych_liczb = 0;
 
-    int licznik_wczytanich = 0;
-    while(suma == 20 && posumowanych_liczb < 5) {
+    int licznik_wczytanych = 0;
+    while(suma <= 20 && posumowanych_liczb < 5) {
         cin >> skladnik;
         licznik_wczytanych++;
         if((skladnik%2 == 0) && (skladnik<10) && (skladnik>-10)) {
@@ -16,7 +16,7 @@
             posumowanych_liczb++;
         }
 
-        cout << "Uzyskana suma: " << suma <<endl << "Zostalo dodanych "<< posumowanych_liczb << " wczytano" << podsumowanych_liczb <<endl;
+        cout << "Uzyskana suma: " << suma <<endl << "Zostalo dodanych "<< posumowanych_liczb << " wczytano" << posumowanych_liczb <<endl;
     } 
 return 0;       
 }
0

@lcbnd1: Pętla nie wykona się ani razu, bo warunek suma == 20 nie jest spełniony.

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