[C++] suma wszystkich liczb podzielnych przez 3

reprezentant
Użytkownik
Użytkownik
Posty: 11
Rejestracja: 31 lip 2011, o 20:56
Płeć: Mężczyzna
Lokalizacja: Polska
Podziękował: 1 raz

[C++] suma wszystkich liczb podzielnych przez 3

Post autor: reprezentant »

Mam takie zadanie i nie wiem czy dobrze mysle

1. Napisz program, który wczytuje liczbę naturalną n, a następnie wyświetla na ekranie informację, ile jest wszystkich liczb podzielnych przez 3 z zakresu: od 0 do n.

mam cos takiego i program podaje mi na koncu wynik wiekszy o jeden niz w rzeczywistosci

Kod: Zaznacz cały

#include <iostream>

using namespace std;

int main()
{
 int licznik,a,b=0;
 cout<< "podaj liczbe naturalna n"<< endl ;
 cin >> a ;
 for (licznik=3;licznik<a;licznik+=3,++b)
    cout <<"liczba podzielna przez trzy "<<licznik<<endl;
    cout<< "wszystkich liczb podzielnych przez trzy w (0,n) : " << ++b << endl;
    
 cout <<"Nacisnij klawisz aby zakonczyc"<<endl;
 system("pause");
 return 0;
}     
Ostatnio zmieniony 21 lis 2011, o 19:35 przez Afish, łącznie zmieniany 1 raz.
Powód: Poprawa wiadomości.
adambak
Użytkownik
Użytkownik
Posty: 1272
Rejestracja: 8 sty 2011, o 18:18
Płeć: Mężczyzna
Lokalizacja: Warszawa
Podziękował: 295 razy
Pomógł: 115 razy

[C++] suma wszystkich liczb podzielnych przez 3

Post autor: adambak »

to.. od wyniku odejmij jeden
zawsze będzie Ci wyświetlał o jeden za dużo jeśli \(\displaystyle{ n}\) jest niepodzielne przez 3, bo np dla \(\displaystyle{ n=20}\), kiedy \(\displaystyle{ licznik=18}\) mamy \(\displaystyle{ b=6}\), co jest dobrze, ale wykonuje jeszcze jeden krok.. wtedy \(\displaystyle{ licznik=21>n}\) i dopiero przerywa pętlę, ale \(\displaystyle{ b}\) już zdążył zwiększyć niepotrzebnie.. jeśli \(\displaystyle{ n}\) jest podzielne przez trzy to wynik zwrócisz dobry.. także jedna instrukcja if załatwi sprawę.. oczywiście można to zrobić w czasie stałym, a nie w pętli.. nawet wynik od razu będzie dobry bez żadnych ifów..
reprezentant
Użytkownik
Użytkownik
Posty: 11
Rejestracja: 31 lip 2011, o 20:56
Płeć: Mężczyzna
Lokalizacja: Polska
Podziękował: 1 raz

[C++] suma wszystkich liczb podzielnych przez 3

Post autor: reprezentant »

Dzieki Tak na poczatku zrobilem ale odejmowanie na koncu jedynki od wyniku uznalem za zbyt "brutalne"
adambak
Użytkownik
Użytkownik
Posty: 1272
Rejestracja: 8 sty 2011, o 18:18
Płeć: Mężczyzna
Lokalizacja: Warszawa
Podziękował: 295 razy
Pomógł: 115 razy

[C++] suma wszystkich liczb podzielnych przez 3

Post autor: adambak »

chociaż w sumie wynik zawsze masz dobry.. w zadaniu teraz doczytałem, że jest: "z zakresu od \(\displaystyle{ 0}\) do \(\displaystyle{ n}\)".. a przecież zero jest podzielne przez każdą liczbę.. więc w sumie wynik masz zawsze dobry..

a tak na przyszłość: ilość liczb dodatnich podzielnych przez \(\displaystyle{ p}\) mniejszych równych \(\displaystyle{ n}\) wynosi: \(\displaystyle{ \left\lfloor \frac{n}{p} \right\rfloor}\).. zobacz, że tak zaoszczędzisz całe przejście pętli.. wystarczy jedno dzielenie..
reprezentant
Użytkownik
Użytkownik
Posty: 11
Rejestracja: 31 lip 2011, o 20:56
Płeć: Mężczyzna
Lokalizacja: Polska
Podziękował: 1 raz

[C++] suma wszystkich liczb podzielnych przez 3

Post autor: reprezentant »

No tak, aczkolwiek program mial byc z wykorzystaniem petli for
Xitami

[C++] suma wszystkich liczb podzielnych przez 3

Post autor: Xitami »

reprezentant pisze:[...]program mial byc z wykorzystaniem petli for
i tak dobrze, że nie potrzebne były np. klasy
autorowi zadania trzeba by coś uciąć i posolić
reprezentant
Użytkownik
Użytkownik
Posty: 11
Rejestracja: 31 lip 2011, o 20:56
Płeć: Mężczyzna
Lokalizacja: Polska
Podziękował: 1 raz

[C++] suma wszystkich liczb podzielnych przez 3

Post autor: reprezentant »

Jeszcze mam pytanie dotyczace petli for i zeby nie robic nowego tematu to zapytam tutaj. Trzeba napisac program liczacy silnie z liczby podanej przez uzytkownika. Myslalem nad tym dlugo. W necie znalazlem gotowca:

Kod: Zaznacz cały

#include<iostream>
int main()
{
        double i;
        double n;
        double silnia=1;
        std::cout << "Program oblicza silnie z wprowadzonej liczby 
";
        std::cout << "Podaj liczbe: ";
        std::cin >> n;  //wprowadzenie liczby
        for(i=1; i<=n; i++)
{
        silnia=silnia*i;
}
        std::cout<<"Silnia z "<<n<<" wynosi "<<silnia;  //wyswietlenie wyniku
        system("pause");
}
Nie rozumiem tutaj instrukcji "silnia=silnia*i" oraz dziwi mnie to ze dla 0 liczy poprawnie silnie bez dodatkowego warunku
adambak
Użytkownik
Użytkownik
Posty: 1272
Rejestracja: 8 sty 2011, o 18:18
Płeć: Mężczyzna
Lokalizacja: Warszawa
Podziękował: 295 razy
Pomógł: 115 razy

[C++] suma wszystkich liczb podzielnych przez 3

Post autor: adambak »

liczy dobrze dla zera bo na początku jest przypisanie:

Kod: Zaznacz cały

double silnia=1;
a potem w żadną pętlę już nie wejdzie skoro \(\displaystyle{ n}\) będzie równe zero..

zapis:

Kod: Zaznacz cały

silnia=silnia*i;
oznacza tyle, że pod zmienną \(\displaystyle{ \text{silnia}}\) należy przypisać wynik mnożenia wartości pod zmiennymi: \(\displaystyle{ \text{silnia}}\) oraz \(\displaystyle{ \text{i}}\)..

czyli np dla \(\displaystyle{ n=4}\) program zadziała tak:
\(\displaystyle{ \text{silnia=1}}\)
\(\displaystyle{ \text{silnia=1; \ i=1;}}\)
\(\displaystyle{ \text{silnia=1; \ i=2;}}\)
\(\displaystyle{ \text{silnia=2; \ i=3;}}\)
\(\displaystyle{ \text{silnia=6; \ i=4;}}\)
\(\displaystyle{ \text{silnia=24; \ i=5; } \text{wychodzi z pętli bo: } i>n}\)

czyli \(\displaystyle{ 4!=24}\), widać to?
ODPOWIEDZ