Ĺadny brzuch
jest takie zadanie:
Mamy dany ciąg liczb całkowitych od a1 do an . Zdefiniujmy ciąg sum częściowych b:bi=a1+a2+....+ai . Zadaniem Twojego programu jest wyznaczenie ciągu b dla pewnego ciągu a. Napisz program, który: * wczyta ze standardowego wejścia liczbę naturalną n oraz liczby od a1 do an , * wypisze na standardowe wyjście od b1 do bn. Wejście W pierwszym wierszu wejścia znajduje się jedna liczba naturalna n. W drugim wierszu znajduje się n liczb naturalnych:a1 do an oddzielonych pojedynczymi odstępami. Wyjście W jedynym wierszu wyjścia należy wypisać oddzielone pojedynczymi odstępami liczby b1 do bn . Przykład Dla danych wejściowych: 4 1 3 2 6 poprawną odpowiedzią jest: 1 4 6 12
i napisałem coś takiego:#include <iostream> using namespace std; int main() { int n; cin>> n; for (int i=n; i=0; i--) int a; cin>> a; int suma=suma+a; cout<<suma; system ("pause"); return 0; }
ale coś nie działa, nie kompiluje sie. co źle zrobiłem? z góry dzięki za pomoc :)
Użytkownik wojzet edytował ten post 28 grudzień 2008, 17:06
Jak na oko, to w pętli for masz błąd, powinno być i>0; poza tym, nie masz klamer dla tej pętli - co jest bardzo ważne... No i to trochę inaczej powinno być wyświetlane - u CIebie wyświetla się ta suma zaraz po podaniu liczby. Kolejna sprawa to taka, że pownienieś na początku programu umieścić definicję zmiennej suma. przecież przy kazdym przebeigu petli for w tej zmiennej sa jakies smieci. na poczatku powinienes zrobic: int suma=0
Jeżeli to jest na spoj czy na jakiś inną stronę tego typu, to ten kod Ci zadziała:
#include <iostream> using namespace std; int main() { int n; cin>> n; int a[n]; //nielegalna instrukcja int b[n]; for (int i=0; i<n; i++) { cin >> a[i]; if(i>0) b[i]=b[i-1]+a[i]; else b[i]=a[i]; } for (int i=0; i<n; i++) cout << b[i] << " "; system ("pause"); return 0; }
Wiem, nie powinno się tak deklarować tablicy statycznej, ale kompilator to puszcza - tak samo Sędzia na spoju czy innej stronie też to uzna - on sprawdza tylko dane wyjściowe. Ew. można pobawić się tablicami dynamicznymi - czego akurat mi się nie chciało :P
dzięki :D działa :D
żeby nie zaśmicać forum kolejnymi tego typu tematami to tu zadam kolejne pytanie.
jest takie zadanie:
Trwa Turniej Strzelców Wyborowych. Do następnej tury przechodzą zawodnicy, którzy zdobyli największą liczbę punktów. Aby usprawnić pracę Jury, poproszono Cię o napisanie programu wyłaniającego zawodników przechodzących do następnej rundy. Zawodnikom przyporządkowano kolejne wielkie litery alfabetu łacińskiego, poczynając od A. Zadanie Opracuj program, który: * wczyta ze standardowego wejścia wyniki poszczególnych zawodników, * wyłoni zawodników przechodzących do następnej rundy, * wypisze na standardowe wyjście ich identyfikatory. Wejście Pierwszy wiersz zawiera liczbę zawodników N. W drugim wierszu zapisano N nieujemnych liczb całkowitych oddzielonych pojedynczymi znakami spacji - i-ta liczba jest wynikiem i-tego zawodnika w kolejności nadanych im identyfikatorów. Liczba punktów zdobyta przez zawodnika nie przekracza 1000. Wyjście W pierwszym wierszu wypisz identyfikatory zawodników (przyporządkowane im litery), którzy osiągnęli największą liczbę punktów. Litery należy wypisać w kolejności alfabetycznej bez odstępów między kolejnymi literami. Przykład Dla danych wejściowych: 5 100 15 100 30 16 poprawną odpowiedzią jest: AC
samo porównanie to chyba wiem jak zrobić ( a przynajmniej mam nadzieje że wiem ;p ) ale nie mam pomysłu jak przypisać kolejnym wynikom kolejne litery alfabetu i jak je później wypisać w kolejności alfabetycznej... na początku wydało mi sie banalne ale jednak wymiękłem. pomoże ktoś? :) z góry dzięki :)
Tablica char?;>
Masz 2 tablice - jedna z punktami, druga z literami (po kolei: A, B, C... nie musisz potem tego w kolejności alfabetycznej wypisywać - automatycznie uzupełniasz). Całego kodu już za Ciebie pisać nie będę :P to już była duuża podpowiedź :)
aha, i o ile dobrze zrozumiałam, można założyć, że mamy najwięcej 26 zawodników (bo z tylu liter składa się alfabet łaciński)
@down: może i wygodniej, ale sądzę, że kolega i tak nie będzie chciał się tym bawić ;P
Wygodniej jest stworzyć tablicę struktur ;)
struct Player { char ID; int Score; }; Player players[100];
dzięki katarina za podpowiedź :) spróbuje coś pokombinować.
Kozack, twojego sposobu nie rozumiem... jeszcze czegoś takiego nigdy nie robiłem
//edit
nie, jednak sie troche pogubiłem... kiedyś coś z tablicami robiłem ale już wszystko zapomniałem... nie da sie tego jakoś inaczej? bo nie pamiętam już jak sie tablic używało :frusty:
Użytkownik wojzet edytował ten post 28 grudzień 2008, 19:42
tworzysz 2 tablice:
int tab1[26]; char tab2[26]={"ABCDEFGHIJKLMNOPQRSTUVWXYZ"};;
Pamiętaj, że indeksy w tablicach zaczynają się od 0, więc jeśli chciałbyś pobrać 1-wszy element tablicy tab2, to potrzebujesz napisać: tab2[0], a nie tab2[1] (bo wtedy pobierzesz B ).
@down: może i wygodniej, ale sądzę, że kolega i tak nie będzie chciał się tym bawić ;P
Twój sposób koledze również nie bardzo się podoba :P
//na początku nie spodobał, ale potem docenił :P - k
Kozack, twojego sposobu nie rozumiem... jeszcze czegoś takiego nigdy nie robiłem
W takim razie proponuję lekturę kursu C++, a nie zadań. Jaki jest sens w rozwiązywaniu zadań w taki sposób? Rozwiązujesz je, bo musisz (jakieś zadanie domowe)?
Nie potrafisz rozwiązać, to próbujesz następne, a do tamtego wracasz później - może akurat wpadniesz na rozwiązanie albo w między czasie dowiesz się czegoś nowego. Takie zadania rozwiązuje się dla siebie, w celu sprawdzenia swoich umiejętności. Nie po to, żeby wysłać poprawne rozwiązanie i dostać punkty na jakiejś stronie.
Chcesz nauczyć się programować, to zacznij od przyswojenia podstaw, a później ćwicz pisanie algortymów.
nie da sie tego jakoś inaczej?
Można. Robiąc 26 zmiennych skoro wyników może być maksymalnie 26 :]
dobra, dzięki katarina :) udało sie :)
Użytkownik wojzet edytował ten post 30 grudzień 2008, 17:01
zanotowane.pl doc.pisz.pl pdf.pisz.pl zsf.htw.pl
Mamy dany ciąg liczb całkowitych od a1 do an . Zdefiniujmy ciąg sum częściowych b:bi=a1+a2+....+ai . Zadaniem Twojego programu jest wyznaczenie ciągu b dla pewnego ciągu a. Napisz program, który: * wczyta ze standardowego wejścia liczbę naturalną n oraz liczby od a1 do an , * wypisze na standardowe wyjście od b1 do bn. Wejście W pierwszym wierszu wejścia znajduje się jedna liczba naturalna n. W drugim wierszu znajduje się n liczb naturalnych:a1 do an oddzielonych pojedynczymi odstępami. Wyjście W jedynym wierszu wyjścia należy wypisać oddzielone pojedynczymi odstępami liczby b1 do bn . Przykład Dla danych wejściowych: 4 1 3 2 6 poprawną odpowiedzią jest: 1 4 6 12
i napisałem coś takiego:#include <iostream> using namespace std; int main() { int n; cin>> n; for (int i=n; i=0; i--) int a; cin>> a; int suma=suma+a; cout<<suma; system ("pause"); return 0; }
ale coś nie działa, nie kompiluje sie. co źle zrobiłem? z góry dzięki za pomoc :)
Użytkownik wojzet edytował ten post 28 grudzień 2008, 17:06
Jak na oko, to w pętli for masz błąd, powinno być i>0; poza tym, nie masz klamer dla tej pętli - co jest bardzo ważne... No i to trochę inaczej powinno być wyświetlane - u CIebie wyświetla się ta suma zaraz po podaniu liczby. Kolejna sprawa to taka, że pownienieś na początku programu umieścić definicję zmiennej suma. przecież przy kazdym przebeigu petli for w tej zmiennej sa jakies smieci. na poczatku powinienes zrobic: int suma=0
Jeżeli to jest na spoj czy na jakiś inną stronę tego typu, to ten kod Ci zadziała:
#include <iostream> using namespace std; int main() { int n; cin>> n; int a[n]; //nielegalna instrukcja int b[n]; for (int i=0; i<n; i++) { cin >> a[i]; if(i>0) b[i]=b[i-1]+a[i]; else b[i]=a[i]; } for (int i=0; i<n; i++) cout << b[i] << " "; system ("pause"); return 0; }
Wiem, nie powinno się tak deklarować tablicy statycznej, ale kompilator to puszcza - tak samo Sędzia na spoju czy innej stronie też to uzna - on sprawdza tylko dane wyjściowe. Ew. można pobawić się tablicami dynamicznymi - czego akurat mi się nie chciało :P
dzięki :D działa :D
żeby nie zaśmicać forum kolejnymi tego typu tematami to tu zadam kolejne pytanie.
jest takie zadanie:
Trwa Turniej Strzelców Wyborowych. Do następnej tury przechodzą zawodnicy, którzy zdobyli największą liczbę punktów. Aby usprawnić pracę Jury, poproszono Cię o napisanie programu wyłaniającego zawodników przechodzących do następnej rundy. Zawodnikom przyporządkowano kolejne wielkie litery alfabetu łacińskiego, poczynając od A. Zadanie Opracuj program, który: * wczyta ze standardowego wejścia wyniki poszczególnych zawodników, * wyłoni zawodników przechodzących do następnej rundy, * wypisze na standardowe wyjście ich identyfikatory. Wejście Pierwszy wiersz zawiera liczbę zawodników N. W drugim wierszu zapisano N nieujemnych liczb całkowitych oddzielonych pojedynczymi znakami spacji - i-ta liczba jest wynikiem i-tego zawodnika w kolejności nadanych im identyfikatorów. Liczba punktów zdobyta przez zawodnika nie przekracza 1000. Wyjście W pierwszym wierszu wypisz identyfikatory zawodników (przyporządkowane im litery), którzy osiągnęli największą liczbę punktów. Litery należy wypisać w kolejności alfabetycznej bez odstępów między kolejnymi literami. Przykład Dla danych wejściowych: 5 100 15 100 30 16 poprawną odpowiedzią jest: AC
samo porównanie to chyba wiem jak zrobić ( a przynajmniej mam nadzieje że wiem ;p ) ale nie mam pomysłu jak przypisać kolejnym wynikom kolejne litery alfabetu i jak je później wypisać w kolejności alfabetycznej... na początku wydało mi sie banalne ale jednak wymiękłem. pomoże ktoś? :) z góry dzięki :)
Tablica char?;>
Masz 2 tablice - jedna z punktami, druga z literami (po kolei: A, B, C... nie musisz potem tego w kolejności alfabetycznej wypisywać - automatycznie uzupełniasz). Całego kodu już za Ciebie pisać nie będę :P to już była duuża podpowiedź :)
aha, i o ile dobrze zrozumiałam, można założyć, że mamy najwięcej 26 zawodników (bo z tylu liter składa się alfabet łaciński)
@down: może i wygodniej, ale sądzę, że kolega i tak nie będzie chciał się tym bawić ;P
Wygodniej jest stworzyć tablicę struktur ;)
struct Player { char ID; int Score; }; Player players[100];
dzięki katarina za podpowiedź :) spróbuje coś pokombinować.
Kozack, twojego sposobu nie rozumiem... jeszcze czegoś takiego nigdy nie robiłem
//edit
nie, jednak sie troche pogubiłem... kiedyś coś z tablicami robiłem ale już wszystko zapomniałem... nie da sie tego jakoś inaczej? bo nie pamiętam już jak sie tablic używało :frusty:
Użytkownik wojzet edytował ten post 28 grudzień 2008, 19:42
tworzysz 2 tablice:
int tab1[26]; char tab2[26]={"ABCDEFGHIJKLMNOPQRSTUVWXYZ"};;
Pamiętaj, że indeksy w tablicach zaczynają się od 0, więc jeśli chciałbyś pobrać 1-wszy element tablicy tab2, to potrzebujesz napisać: tab2[0], a nie tab2[1] (bo wtedy pobierzesz B ).
@down: może i wygodniej, ale sądzę, że kolega i tak nie będzie chciał się tym bawić ;P
Twój sposób koledze również nie bardzo się podoba :P
//na początku nie spodobał, ale potem docenił :P - k
Kozack, twojego sposobu nie rozumiem... jeszcze czegoś takiego nigdy nie robiłem
W takim razie proponuję lekturę kursu C++, a nie zadań. Jaki jest sens w rozwiązywaniu zadań w taki sposób? Rozwiązujesz je, bo musisz (jakieś zadanie domowe)?
Nie potrafisz rozwiązać, to próbujesz następne, a do tamtego wracasz później - może akurat wpadniesz na rozwiązanie albo w między czasie dowiesz się czegoś nowego. Takie zadania rozwiązuje się dla siebie, w celu sprawdzenia swoich umiejętności. Nie po to, żeby wysłać poprawne rozwiązanie i dostać punkty na jakiejś stronie.
Chcesz nauczyć się programować, to zacznij od przyswojenia podstaw, a później ćwicz pisanie algortymów.
nie da sie tego jakoś inaczej?
Można. Robiąc 26 zmiennych skoro wyników może być maksymalnie 26 :]
dobra, dzięki katarina :) udało sie :)
Użytkownik wojzet edytował ten post 30 grudzień 2008, 17:01