vistauser utworzono 4 grudnia 2010 utworzono 4 grudnia 2010 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 4 grudnia 2010 komentarz 4 grudnia 2010 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 4 grudnia 2010 komentarz 4 grudnia 2010 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 4 grudnia 2010 komentarz 4 grudnia 2010 Bez fora można: suma wynosi (a+b)*(b-a+1)/2
benkowik komentarz 4 grudnia 2010 komentarz 4 grudnia 2010 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 4 grudnia 2010 komentarz 4 grudnia 2010 @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 5 grudnia 2010 komentarz 5 grudnia 2010 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 5 grudnia 2010 komentarz 5 grudnia 2010 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 5 grudnia 2010 komentarz 5 grudnia 2010 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 5 grudnia 2010 komentarz 5 grudnia 2010 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.