x-kom hosting

Sumowanie liczb z podanego zakresu (C++).

vistauser
utworzono
utworzono

Jak w temacie. Mam problem z napisaniem pewnego programu, który ma sumować liczby podane z zakresu.

Zatrzymałem się w tym miejscu, kod zamieszczam poniżej: 

W chwili obecnej program ten wyświetla mi pionowo ciąg liczb z podanego zakresu, proszę o pomoc:
 

#include<iostream>
using namespace std;
int main()
{
int a,b;
cout<<"Podaj pierwsza liczbe"<<endl;
cin>>a;
cout<<"Podaj druga liczbe"<<endl;
cin>>b;
for (int c=a; a<=b; a++)
{
cout<<a<<endl;
}
system("pause");
return 0;
}

 

benkowik
komentarz
komentarz

Uwaga 1 - po co u siebie stworzyłeś zmienną int c skoro później odwoływałeś się do a? Ja bym to zrobił tak:

for (int c=a; c<=b; c++)



Czyli wartość c przyjmuje początek zakresu i dąży do końca czyli do b.

Uwaga 2 - nie może Ci zsumować zakresu bo ty po prostu wyświetlasz jego daną wartość. Nie znam składni C++ ale ogólnie musisz zrobić zmienną do której będziesz dodać kolejne liczby z zakresu, czyli

suma = suma + aktualna;

 

wojtex5
komentarz
komentarz

najpierw zrób sobie jakąś zmienną co będzie przechowywać sumę, np. zmienną suma.
później robisz pętlę, ustawiasz licznik pętli na liczbę wczytaną (w tym wypadku a) i zwiększasz sumę o licznik tak długo aż licznik nie osiągnie liczby b, czyli w przełożeniu na C++ wyglądało by to mniej więcej tak:

#include <iostream>

using namespace std;
int main()
{
int a,b,suma=0; //tworzenie zmiennych a,b,suma i inicjalizacja sumy liczbą 0;
cout<<"Podaj pierwsza liczbe"<<endl;
cin>>a;
cout<<"Podaj druga liczbe"<<endl;
cin>>b;

for(int licznik=a;licznik<=b;licznik++)
suma+=licznik; //jeśli nie wiesz ocb. z suma+=licznik to to samo co suma=suma+licznik
cout<<"suma liczb to "<<suma<<"\n";
system("pause");
}

 

rafalluz
komentarz
komentarz

Bez fora można: suma wynosi (a+b)*(b-a+1)/2

benkowik
komentarz
komentarz

Ewentualnie możesz bardziej ambitnie do tematu podejść jeśli jest to zakres wzrastający o 1. Bardziej ambitnym podejściem będzie iloczny mediany przez liczbę elementów:

 

void mediana(int med[],int k)
{
int media;

if(k%2==0)
media=(k/2)-1;
else
media=k/2;
cout<<endl;

cout<<"Suma zbioru wynosi; "<<med[media]*k;
}

 

rafalluz
komentarz
komentarz

@benkowik

z tego, co pamiętam, mediana dla parzystej liczby elementów to średnia arytmetyczna dwóch środkowych wartości.

No i oczywiście med musi być posortowane (ale to już tak dla przypomnienia).

A przy zakresie wzrastającym o 1 (i zresztą przy dowolnym ciągu arytmetycznym), mediana i średnia arytmetyczna to dokładnie to samo.

wojtex5
komentarz
komentarz

nie ma co koledze dawać takich trudnych przykładów.
widać że @Patryk2009 dopiero zaczyna przygodę z programowaniem, więc nie warto od razu dawać takich kosmicznych przykładów, jak przekazywanie tablicy do funkcji.
Widać że kolega chce robić to na pętli for - chodzi o to żeby program był zrozumiały a nie tylko żeby działał.
to samo można zapisać na wiele sposobów, ale jak napisałem chodzi o ten zrozumiały

co ciekawe @benkowik pisze:

Cytuj

Nie znam składni C++


a następnie:

Cytuj

Ewentualnie możesz bardziej ambitnie do tematu podejść jeśli jest to zakres wzrastający o 1. Bardziej ambitnym podejściem będzie iloczny mediany przez liczbę elementów:
void mediana(int med[],int k)
{
int media;

if(k%2==0)
media=(k/2)-1;
else
media=k/2;
cout<<endl;

cout<<"Suma zbioru wynosi; "<<med[media]*k;
}



Zaprzeczasz sam sobie. Najpierw piszesz, że nie masz pojęcia o C++, ale po czasie podajesz rozwiązanie, które jest na poziomie wyżej niż podstawowym. Kolejny askepkt to mediana. Nie każdy zna takie pojęcia (tak przy okazji nawet ja nie wiedziałem że takie coś w ogóle istnieje). Udzielając odpowiedzi róbmy to tak, aby były zrozumiałe dla Autora/Autorki tematu. Zakładający temat próbował z pętlą for i odpowiedziałem z jej użyciem. Moje rozwiązanie (chyba) jest proste, szybko działające a przede wszystkim zrozumiałe. Twoje rozwiązanie , które bardziej rozbudowane może przydać się komuś kto siedzi w programowaniu (i choćby wie co to mediana). Rozwiązanie @rafalluz'a jest dużo prostsze i nawet dużo szybsze od mojego. Nie jest może od razu tak zrozumiałe ale wystarczy się przyjrzeć i od razu widać, że wzór jest wyprowadzony z

n*(n-1)/2

 który jest na poziomie podstawówki (i oczywiście wyznacza sumę liczb naturalnych zaczynając od 1 do n).

benkowik
komentarz
komentarz

Tylko kto Ci powiedział że zakres zaczyna się od wartości 1? Więc Twój sposób jest całkowicie beznadziejny w tej sytuacji.
Ja nie mówię, że rafalluz podał złe rozwiązanie ale swoje programy można ciekawie rozbudowywać o różne funkcje.
 

Cytuj

Nie każdy zna takie pojęcia (tak przy okazji nawet ja nie wiedziałem że takie coś w ogóle istnieje)


No to masz problem ale to jest na poziomie gimnazjum przed wejściem w funkcje więc wybacz.

wojtex5
komentarz
komentarz

omg facet naucz sie czytać.
nikt kto nie zna C++ nie napisze ci po upływie godziny takiej funkcji!!!!@!#$@@%@^$
i w dodatku nikt nie mówi że to rozwiązanie co ja podałem (n*n-1)/2) to rozwiązanie problemu
jeśli nie znasz polskiego to wróć się do 1. klasy podstawówki i jak ją skończysz to pogadamy.
napisałem:

Cytuj

Nie jest może od razu tak zrozumiałe ale wystarczy się przyjrzeć i od razu widać, że wzór jest wyprowadzony z
n*(n-1)/2
który jest na poziomie podstawówki (i oczywiście wyznacza sumę liczb naturalnych zaczynając od 1 do n).



poza tym jakoś mediany w gimnazjum nie miałem, więc skąd mam wiedzieć że takie coś w ogóle istnieje?!?! Autor tematu równie dobrze mógł nie wiedzieć tak samo jak ja, co to jest, więc ogarnij chłopie i przestań się bronić jak jagnię przed wilkiem. bez bicia widać, że kopiowałeś jak byk z neta i nawet mogę podać linka. (albo lepiej nie bo jest z innego forum)

Nie pakuj się w rzeczy związane z C++ jak nie masz o tym pojęcia.

Moim zdaniem temat zamknięty. Nie ma po co prowadzić dalszej dyskusji, bo to nie ma sensu.

benkowik
komentarz
komentarz

To po co zabierasz głos jak nie masz nic mądrego do powiedzenia?
 

Cytuj

Nie pakuj się w rzeczy związane z C++ jak nie masz o tym pojęcia.


Dlaczego nie? Mówiłem że umiem programować ale nie znam składni to w 10 minut można przeczytać kurs i skleić formułę więc o co Ci chodzi? Sam zacznij się uczyć a nie pieprzyć nie na temat.

Wciąż szukasz rozwiązania problemu? Napisz teraz na forum!

Możesz zadać pytanie bez konieczności rejestracji - wystarczy, że wypełnisz formularz.

×
×
  • Dodaj nową pozycję...

Powiadomienie o plikach cookie

Strona wykorzystuje pliki cookies w celu prawidłowego świadczenia usług i wygody użytkowników. Warunki przechowywania i dostępu do plików cookies możesz zmienić w ustawieniach przeglądarki.