Ciąg liczbowy.

0

Witam,
Mam za zadanie napisać prosty program który wypisze ciąg sum liczb. Program ma być bez tablic, z użyciem pętli for, while do, do while. Napisałem coś takiego:

 program ciagi;
var n, i, suma, x: integer;
begin
i:= 1;
suma:=0;
read(n);
while i <= n do
begin
read(x);
i:=i+1;
suma:=suma+x;
writeln(suma);
end;
readln;
end. 

Moje pytanie brzmi, czy da sie napisać to w taki sposób by wyświetlił mi wszystkie wyniki z pętli po zakończeniu sie pętli w jednej linii ? czyli zamiast:
1 podaje mu
1 wypisuje
3 podaje mu
4 wypisuje
2 podaje mu
6 wypisuje
6 podaje mu
12 wypisuje
to wypisał mi: 1 4 6 12(same wyniki) ? Che mu najpierw podać liczbe n, potem tyle liczb ile liczba n, żeby wykonał pętle tyle razy ile n ale wynik mi podał na sam koniec wszystkie, wypisane w lini a nie po zakonczeniu każdej pętli osobno wynik... Głowie sie nad tym juz 3 dni wiec pomyślałem że skorzystam z Waszej pomocy. Pozdrawiam

0

Można, ale do tego musisz magazynować dane wejściowe lub wyniki. Czyli tablica lub strumień lub string;

0

A jakaś podpowiedź co do tablicy ?
jak ją zadeklarować i w jakim miejscu ? byłbym wdzięczny :)

0

Jak wsztstkie zmienne w Pascalu po słowie kluczowym var. Więcej masz na google i w kursach, a temat przenoszę do Newbie, bo dotyczy banalnych podstaw i na przyszłośc umieszczaj nazwę języka w tagu, a nie temacie wątku. Staraj się też umieszczać kod w konretnych znacznikach dla języka, a nie ogólnych i formatuj go po ludzku.

0

Wydaje mi się że w temacie napisałeś: - "Program ma być bez tablic ..."

0

Wiem, że nie powinienem podawać gotowców, ale zachodziłem w głowę z czym to niektórzy mają problemy. Chcąć pomóc, a nie mając ochoty analizować dlaczego pytającemu coś tam nie działa w jego kodzie. Dlaczego? Ponieważ kod miał formatowanie, które śmiało mozna nazwać "z d_u_p_y". W zasadzie to żadnego. Dopiero z niegramatycznego tłumaczenia co chce osiągnąc pytający domyśliłem się jak to prawidłowo można zakodować. Także napisałem to co poniżej. Sprawa jest - jak widać i jak się mogłem domyśleć - banalna do potęgi banalnej czyli bardzo dużej ;) Przeanalizuj sobie ten kod i wszystko będziesz wiedział. Następnym razem jednak zanim nasmarujesz na forum, usiądź i najpierw zakoduj coś samodzielnie, a przede wszystkim formatuj kod, bo inaczej nie dojdziesz co i jak. Wtedy jeżeli coś nie działa to pomyśl jak zrobić aby zaczeło. Zadanie jakie sobie postawiłeś jest na tyle jak wspomniałem banalne, że nawet debuggera nie potrzeba, bo można całośc szybko przetestować po uruchomieniu.

program ciongi_nie_ciongi_uzywajcie_google_i_myslcie_dziwonlongi;

{$APPTYPE CONSOLE}

var
  S : string;
  Count, DigitValue, DigitsCount, ErrorCode, Sum : integer;
begin
  repeat
    Write('Podaj ilosc cyfr do wprowadzenia: ');
    Readln(S);
    Val(S, DigitsCount, ErrorCode);
  until (DigitsCount > 0) and (ErrorCode = 0);
  Sum := 0;
  Count := 0;
  repeat
    Count := Count + 1;
    repeat
      Write('Podaj liczbe ', Count, ' z ', DigitsCount, ': ');
      Readln(S);
      Val(S, DigitValue, ErrorCode);
    until (ErrorCode = 0);
    Sum := Sum + DigitValue;
    Writeln('Suma dotychczas wprowadzonych liczb to: ', Sum);
  until Count = DigitsCount;
  Readln;
end.
0

@olesio, zrobiłeś to samo co pytający, jedynie że po ludzku - idiotoodpornie.
Zaś pytanie było jak zrobić żeby najpierw odpytało o wszystkie liczby a potem pokazało kumulacje sumy.
Podejrzewam że to zadanie z jakieś sprawdzarki u której na wejściu na się pojawić:
4
1 3 2 6
a na wyjściu:
1 4 6 12
jeżeli to tak to nic nie potrzebujesz robić.

0

Witam ponownie, troche zrozumienia by sie przydało Wam. Sam, tak skomplikowany (jak dla mnie) kod nie rozwiąże mojego problemu. Zapisałem sie na kurs Pascala, miałem zaledwie 1 zajęcia i jak sie domyślacie nie jestem w stanie ogarnąć wyżej napisanego kodu. Chciałem tylko zrozumieć kod który ja napisałem, bo spełniał swoją funkcje lecz nie wypisywał mi liczb w odpowiedniej "kolejności". Ja z moim wykształceniem architekta też moge sypnąć wieloma obliczeniami początkującemu studentowi architektury na odpowiednim forum ale nie na tym polega pomoc. Tak, że "idiotoodpornie" mnie sie nie tyczy. Sam mam wielką wiedze w swojej dziedzinie ale jestem wyrozumiały względem początkujących, gdyż sam kiedyś taki byłem. Dziękuje za pomoc. Pozdrawiam

0

Aż trochę dziwne że osoba o takiej wiedzy i takiego dziwoląga robi:

  Count := 0;
  repeat
    Count := Count + 1;
      [...]
  until Count = DigitsCount;

To powinno być zrobione przy użyciu for

 until (ErrorCOde = 0);

Komuś tu brakuje podpowiadania składni? :)

Program ma być bez tablic

Zawsze mnie bawią tego rodzaju stwierdzenia. Tablicę można zrobić bez użycia tablicy, just skill...

Zaś pytanie było jak zrobić żeby najpierw odpytało o wszystkie liczby a potem pokazało kumulacje sumy.
Podejrzewam że to zadanie z jakieś sprawdzarki u której na wejściu na się pojawić:
4
1 3 2 6
a na wyjściu:
1 4 6 12
jeżeli to tak to nic nie potrzebujesz robić.

No właśnie, na to wychodzi. Skoro tablicy nie powinno się używać to nie możemy pamiętać danych do zakończenia wprowadzania (no chyba że lubimy emulować tablicę).

0

Chciałem tylko zrozumieć kod który ja napisałem, bo spełniał swoją funkcje lecz nie wypisywał mi liczb w odpowiedniej "kolejności"

Writeln wypisuje, readln wczytuje, operacje te są wykonywane w takiej kolejności w jakiej ich używasz w programie. tj. po każdym dodaniu wyświetla ci aktualny stan.
Program nie robi tego co chcesz, tylko to co mu napiszesz. Jeżeli byś najpierw buforował wyniki (np. w tablicy) a dopiero po wyjściu z pętli wczytującej wyświetlał wyniki to byś miał tak jak chcesz. Ale ty po readln masz writeln które powoduje wyświetlenie wyniku natychmiast.

Witam ponownie, troche zrozumienia by sie przydało Wam.

Ja z moim wykształceniem architekta też moge sypnąć wieloma obliczeniami początkującemu studentowi architektury na odpowiednim forum ale nie na tym polega pomoc.

Skąd mieliśmy wiedzieć, że jesteś aż tak początkujący? W dziale newbie wypowiadają się również osoby które wiedzą już sporo ale nie czują się na tyle dobre żeby pisać w dziale dedykowanym poważniejszym zagadnieniom. Niestety wszystkiego nie wiemy, przedstawiłeś problem tak jakby to było zadanie domowe, więc i potraktowaliśmy to tak.

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