• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

"Inteligentne" sumowanie

Object Storage Arubacloud
0 głosów
421 wizyt
pytanie zadane 14 czerwca 2018 w C i C++ przez Alan Kruszyński Obywatel (1,410 p.)
Chcę napisać program który:
-Odczyta z pliku kolejne liczby (jedno- i wielocyfrowe, także ujemne)

-Doda do sumy pierwszą odczytaną wartość (suma wynosi na początku 0), a potem przesunie się w pliku o tyle liczb ile wynosi właśnie odczytana wartość i znów doda ją do sumy i przesunie się itd.

-Po dodaniu ostatniej w pliku tekstowym liczby przerwie swoje działanie i wypisze aktualną sumę

Mam pomysł taki, aby w pętli while która sprawdza czy mamy EOF zawrzeć instrukcje która kolejno odczyta, zapisze do tablicy odczytane liczby a potem w tej tablicy do zerowej sumy dodam sobie wartość pierwszej komórki a potem przesunę się o ilość pozycji równą właśnie odczytanej liczbie i gdy przesunę się na ostatnią to program przerwie działanie i wypisze aktualną sumę. W mojej wyobraźni to dosyć sporo kodu jak na taki prosty program, widziałem jak kolega napisał to dosłownie w kilku linijkach. Czy jest jakiś prostszy sposób, czy to tylko ja wyobrażam sobie kilkanaście zbędnych linijek? Proszę o odpowiedzi opisowe zamiast gotowych fragmentów  kodu, chcę sam opracować to rozwiązanie, ale nie za bardzo wiem czy mój pomysł jest dobry.
komentarz 15 czerwca 2018 przez niezalogowany
Ile linijek widzisz u siebie, a ile u kolegi (tylko main nie licząc klamer)? W przypadku liczb ujemnych należy cofać iterację?
komentarz 15 czerwca 2018 przez RafalS VIP (122,820 p.)
Dobry pomysł i to wcale nie będzie kto wie ile linijek. Nie sugeruj się kolega może zrobił to na palę bez żadnego sprawdzania :p

2 odpowiedzi

0 głosów
odpowiedź 14 czerwca 2018 przez Typowy Janusz Dyskutant (8,150 p.)
Pisz i próbuj :D Nie sugeruj się kolegą, bo mógł mieć nieoptymalnie wszystko zrobione.

W pythonie rzeczywiście wyszło by kilka linijek. W c++ nie wiem. Nigdy nie lubiłem tego języka.
0 głosów
odpowiedź 16 czerwca 2018 przez Alan Kruszyński Obywatel (1,410 p.)

Mam taki program: 

#include <stdio.h>
#include <stdlib.h>
#include <windows.h>

/*ZMIENNE*/
int buf;
int tab[30];
int pos = 0;
int suma = 0;
int i=0;

//-------------------PROGRAM---------------------------------------------//
int main(){
    FILE *plik;
    plik=fopen("data.txt", "rt");

//WCZYTANIE PLIKU DO TABLICY
    while(fscanf(plik, "%d", &buf)!= EOF){
        tab[pos] = buf;
        pos++;
    }

    while(i<=pos){
        suma = suma + tab[i];
        i = i + tab[i];
    }

printf("%d", suma);

return 0;
}

Tak wygląda plik data.txt:

2
2
1
3
-2
2
-1
1

Dlaczego po wykonaniu sumowania otrzymuję wynik 6? Jeżeli dobrze myślę to powinienem dostać wynik 8.

komentarz 16 czerwca 2018 przez Sedi Stary wyjadacz (10,200 p.)
edycja 16 czerwca 2018 przez Sedi
Aż ciekawości sprawdziłem Twój kod, co rzadko mi się zdarza. Masz jakiś dziwny kompilator, bo na gcc druga pętla while blokuje się w nieskończoność. Zmienienie warunku może w tym przypadku pomóc, ale problem z tym algorytmem jest taki, że dla innych danych wyjściowych niż Ty dostałeś będzie nieprawidłowe.
komentarz 16 czerwca 2018 przez RafalS VIP (122,820 p.)
Dodaj dodatkowy warunek na i w drugiej petli. Żeby nie wychodziło na minus :p
komentarz 17 czerwca 2018 przez Alan Kruszyński Obywatel (1,410 p.)

@Sedi, typowy kompilator z Code:Blocks, niz nadzwyczajnego. A problemu nie ma, bo na potrzeby obecnej chwili program ma się wykonywać dokładnie z tymi liczbami które napisałem w pliku

komentarz 17 czerwca 2018 przez Alan Kruszyński Obywatel (1,410 p.)

@Sedi, zmieniłem warunek while na i<pos i działa jak należy

Podobne pytania

+1 głos
2 odpowiedzi 433 wizyt
pytanie zadane 25 lutego 2021 w JavaScript przez MarcoPolo Nowicjusz (180 p.)
+1 głos
1 odpowiedź 2,197 wizyt
pytanie zadane 18 stycznia 2021 w JavaScript przez Martita Bywalec (2,470 p.)

92,555 zapytań

141,402 odpowiedzi

319,537 komentarzy

61,938 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj.

Akademia Sekuraka

Kolejna edycja największej imprezy hakerskiej w Polsce, czyli Mega Sekurak Hacking Party odbędzie się już 20 maja 2024r. Z tej okazji mamy dla Was kod: pasjamshp - jeżeli wpiszecie go w koszyku, to wówczas otrzymacie 40% zniżki na bilet w wersji standard!

Więcej informacji na temat imprezy znajdziecie tutaj. Dziękujemy ekipie Sekuraka za taką fajną zniżkę dla wszystkich Pasjonatów!

Akademia Sekuraka

Niedawno wystartował dodruk tej świetnej, rozchwytywanej książki (około 940 stron). Mamy dla Was kod: pasja (wpiszcie go w koszyku), dzięki któremu otrzymujemy 10% zniżki - dziękujemy zaprzyjaźnionej ekipie Sekuraka za taki bonus dla Pasjonatów! Książka to pierwszy tom z serii o ITsec, który łagodnie wprowadzi w świat bezpieczeństwa IT każdą osobę - warto, polecamy!

...