Elektroda.pl
Elektroda.pl
X
Proszę, dodaj wyjątek www.elektroda.pl do Adblock.
Dzięki temu, że oglądasz reklamy, wspierasz portal i użytkowników.

C++ - Liczenie średniej liczb z pliku

Werpet 06 Wrz 2016 15:32 2025 38
  • #1 06 Wrz 2016 15:32
    Werpet
    Poziom 4  

    Witam, mam problem z napisaniem pliku, który liczy średnią liczb zawartych w danym pliku. Trochę się zagubiłem wyszła pętla w pętli i nie wiem co dalej. :( Potrafi ktoś pomóc?

    Kod: c
    Zaloguj się, aby zobaczyć kod

    0 29
  • #2 06 Wrz 2016 16:56
    JacekCz
    Poziom 36  

    "Wyszło" tzn Ctrl V w złym miejscu?

    Pomógłbym CI, jakbyś nie kopiował w jedno miejsce ściąganych z netu przynajmniej trzech fragmentów od sasa do lasa, przypisując sobie autorstwo.

    Dam Ci trzy (dość krótkie co prawda) wędki, jak pokażesz że masz wolę łowienia, mogę pomóc przy rybie.
    a) skoro używasz C++, używaj konsekwentnie np nie zmiennych w stylu C tylko w typowych dla C++
    b) określ zawartość czytanego pliku, jak te liczby są rozmieszczone
    c) podpowiem Ci tyle, że zmienne które się tajemniczo tu pojawiły muszą otrzymać wartości. To już 3/4 rozwiązania.

    PS. Ostatnio modne się zrobiło wklejanie system("pause") - pewnie ktoś w google wysoko spozycjonował.

    0
  • #3 06 Wrz 2016 17:10
    Krzysztof Gustaw
    Poziom 23  

    Witam!
    Spróbuj czegoś takiego:

    Kod: c
    Zaloguj się, aby zobaczyć kod

    Edit: poprawiono
    Pozdrawiam
    KG

    0
  • #4 06 Wrz 2016 18:50
    Werpet
    Poziom 4  

    Kopiowane z internetu nie jest tylko na bazie internetu się uczyłem. Nie chcę tego programu dostać gotowego, ponieważ potrzebuję się nauczyć. Liczby w pliku są w jednej kolumnie. Jakie wartości powinny dostać te zmienne? System("pause") jest, ponieważ tak uczą nas w szkole.

    JacekCz napisał:
    "Wyszło" tzn Ctrl V w złym miejscu?

    Pomógłbym CI, jakbyś nie kopiował w jedno miejsce ściąganych z netu przynajmniej trzech fragmentów od sasa do lasa, przypisując sobie autorstwo.

    Dam Ci trzy (dość krótkie co prawda) wędki, jak pokażesz że masz wolę łowienia, mogę pomóc przy rybie.
    a) skoro używasz C++, używaj konsekwentnie np nie zmiennych w stylu C tylko w typowych dla C++
    b) określ zawartość czytanego pliku, jak te liczby są rozmieszczone
    c) podpowiem Ci tyle, że zmienne które się tajemniczo tu pojawiły muszą otrzymać wartości. To już 3/4 rozwiązania.

    PS. Ostatnio modne się zrobiło wklejanie system("pause") - pewnie ktoś w google wysoko spozycjonował.


    Dodano po 3 [minuty]:

    C:\Users\Damian\Desktop\program\BezNazwy1.cpp In function 'int main(int, char**)':
    17 16 C:\Users\Damian\Desktop\program\BezNazwy1.cpp [Error] expected initializer before '.' token
    19 4 C:\Users\Damian\Desktop\program\BezNazwy1.cpp [Error] 'odczyt' was not declared in this scope
    24 7 C:\Users\Damian\Desktop\program\BezNazwy1.cpp [Error] 'wiersz' was not declared in this scope

    Jak zdeklarować wiersz i odczyt? :O

    Krzysztof Gustaw napisał:
    Witam!
    Spróbuj czegoś takiego:

    Kod: c
    Zaloguj się, aby zobaczyć kod

    Pozdrawiam
    KG

    0
  • #5 06 Wrz 2016 19:23
    JacekCz
    Poziom 36  

    Krzysztof Gustaw napisał:
    Witam!

    Kod: c
    Zaloguj się, aby zobaczyć kod



    Werpet napisał:
    Liczby w pliku są w jednej kolumnie


    Kolumna dla plik txt jest słowem niezby ścisłym, jedna w wierszu?
    Poprzedzona spacjami, czy niekoniecznie / nigdy?


    Werpet napisał:

    Jakie wartości powinny dostać te zmienne?


    Takie, aby przybliżać się do założonego efektu. To wiodąca część mojej zagadki.
    :)
    Są zmienne, nic z nimi się nie dzieje (w twoim kodzie), stąd moje wnioskowanie o autorstwie.

    Na plus, co o nich powiem, to mają dobre, znaczące nazwy, to powinno dobrze kierować wzrok i palce. Szczegół, ale ważny.

    Werpet napisał:


    System("pause") jest, ponieważ tak uczą nas w szkole.

    system("pause") jest bardzo ciężką komendą, polega na uruchomieniu podprocesu dla czekania na klawisz, i nie zawsze musi się powieść (z kilku powodów). Żle was uczą. *)

    Z innej szkoły wywodzi się
    Kod: c
    Zaloguj się, aby zobaczyć kod
    jest to nieprzenośne, ale czasem używają z niego getch() do oczekiwania na klawisz.
    Na ile czytam, nie jest ten include potrzebny. Przenośne (ale minimalnie inny sens - czeka na enter) jest getchar()


    Błędów ja nie powiąże do numerów linii, ale przypuszczam boli to:


    Kod: c
    Zaloguj się, aby zobaczyć kod

    -->

    Kod: c
    Zaloguj się, aby zobaczyć kod



    *) jest wiele złego z dydaktyką i C. Język jest niebezpieczny, wiele sytuacji nieokreślonych. C++ użyty w pełni jest koszmarnie skomplikowany.
    Moim zdaniem jest błędem uczenie tego mas - są od tego mniej obcinające palce języki - ale jest "modny". Najgorsze na poziomie dydaktyki jest multu przypadków niezdefiniowanych (UB). Nie są to błędy które walą po łapach, tylko chowają się pod dywan. Czego złudnie uczą? "Jestem dobrym programistą bez błędów"

    Wielu nauczycieli C - subiektywny osąd - by pękła jakby miała programować "w przemyśle". Jak ktoś umie robić - więc to robi, jak nie umie? To ....

    0
  • #6 06 Wrz 2016 21:58
    Krzysztof Gustaw
    Poziom 23  

    Witam ponownie!
    Po pierwsze, poprawiłem program (cóż zastosowałem na swoje nieszczęście metodę Kopiego-Pejsta i przegapiłem parę rzeczy
    Nie rozumiem, po co najpierw czytanie wiersza do bufora tekstowego? Przecież potem trzeba przekształcić w jakiś sposób tekst do właściwej postaci tu: daną typu double. Czyżby potrzeba jeszcze gdzieś je przechowywać? A może zliczać? A może wczytywać co n-tą? W końcu, jak zrozumiałem, należy tylko zsumować dane i wyliczyć średnią i na koniec ją wypisać. Po co dodatkowy bufor tekstu? Nie wystarczy przeczytać z pliku wejściowego danej za pomocą przeciążonego operatora >> która zostanie od razu przekształcona do właściwej postaci? Jeśli potrzebne jest jej wypisanie, to użyć komplementarnego operatora << który również przekształci daną do właściwej postaci? Nie mam informacji o naturze pliku np czy zawiera on wyłącznie dane liczbowe w formacie tekstowym? A może binarnym? A może są przemieszane liczby z innymi tekstami?

    0
  • #7 06 Wrz 2016 22:32
    Sztandar18
    Poziom 26  

    Niech autor najlepiej poda przykładowe wejście programu...
    Czyli np.:
    1
    2
    8
    10
    6
    I wyliczyć z tego średnią, albo
    10 4 2 6 32 5
    I wyliczyć średnią
    Polecam do kompilowania kodu: http://ideone.com

    P.S.
    Przykładowe rozwiązanie w PHP:
    http://ideone.com/X8rl13

    Nie krzyczcie na brak wcięć - pisane na telefonie. W szkole nie pisaliśmy długo w C++, więc nie podsyłam póki co rozwiązania w C++, a jest to zapewne banalnie proste.

    Nauczyciel przez 3 lata katował nas zadaniami z tej strony:
    http://pl.spoj.com/problems/latwe/sort=6

    Możesz sobie porobić zadania i poćwiczyć ;)

    0
  • #8 07 Wrz 2016 10:41
    Werpet
    Poziom 4  

    wejście programu:
    1
    4
    5
    7
    2
    i z tego średnia

    0
  • #9 07 Wrz 2016 12:06
    Krzysztof Gustaw
    Poziom 23  

    Witam!
    Zainstalowałem devCpp i TURBO C++ (normalnie korzystam z Pelles C)
    Wklejam sprawdzony i działający kod dla DevCpp:

    Kod: c
    Zaloguj się, aby zobaczyć kod

    0
  • #10 07 Wrz 2016 14:31
    JacekCz
    Poziom 36  

    Sztandar18 napisał:

    Polecam do kompilowania kodu: http://ideone.com


    Nie wierzę w podobne środowiska i C/C++ w jakiejś pełni (hardcore na wskaźnikach itd). DOBRE środowisko we własnej obronie MUSI odrzucić hardkor. Na gruncie języków interpretowanych na pewno bardziej przydatne.

    Szkolne fragmenty może ... no to z gadania przejdźmy do praktyki, wklejam z kol Gustawa

    Kod: bash
    Zaloguj się, aby zobaczyć kod


    po poprawieniu (skasowaniu linii)

    Kod: bash
    Zaloguj się, aby zobaczyć kod


    Wbrew słowu sukces, nie jest to sukces. Wszystko w poprzednich postach.

    W tym konkretnym przypadku fajna zabawka jako lekki test kompatybilności kodu.
    Pozdrawiam nauczycieli z tej szkoły (złośliwie).

    0
  • #11 07 Wrz 2016 14:40
    Sztandar18
    Poziom 26  

    Na tej stronie nie można podać nazwy pliku... Tam za plik robi STDIN, szczerze to nie wiem jaką funkcję zastosować, żeby poprawnie coś wczytać z tego STDIN'a. Tego kompilatora używaliśmy na zaliczeniach w techniku, głównie w zadaniach bardziej z algorytmiki, reszta projektów pisaliśmy w oparciu o wamp'a lub xampp'a.

    Oczywiście, jeśli chce się pisać coś poważniejszego, to lepiej zainstalować coś pokroju Dev-C++.

    0
  • #12 07 Wrz 2016 14:43
    JacekCz
    Poziom 36  

    Sztandar18 napisał:
    Na tej stronie nie można podać nazwy pliku... Tam za plik robi STDIN, szczerze to nie wiem jaką funkcję zastosować, żeby poprawnie coś wczytać z tego STDIN'a. Tego kompilatora używaliśmy na zaliczeniach w techniku, głównie w zadaniach bardziej z algorytmiki, reszta projektów pisaliśmy w oparciu o wamp'a lub xampp'a.


    Może bardziej miałem na myśli to "pause" które nie pojawia się (bo dlaczego ma się pojawić)

    0
  • #13 07 Wrz 2016 14:59
    Sztandar18
    Poziom 26  

    Pause nie zadziała, bo kompilator jest pod linuxem? Czy nie rozumiemy się dalej?

    0
  • #14 07 Wrz 2016 15:08
    JacekCz
    Poziom 36  

    Sztandar18 napisał:
    Pause nie zadziała, bo kompilator jest pod linuxem? Czy nie rozumiemy się dalej?


    Że linux to jedno.
    Że system("xxxx") *) to powołanie oddzielnego procesu to:
    a) koszty
    b) w ogóle nie wiadomo co się może stać. Może się nie wykona, może strumienie (pliki) się pomieszają.

    Pomijam środowisko, warto pogrzebać w googlu o interpreterach C, i dlaczego każdy z nich jak się wejdzie w szczegóły, to kiszka. To sa te same zagadnienia.
    C to niebezpieczna brzytwa. Środowisko webowe nie może udostępnic więcej niż plastikowego widelca (dbając o własne bezpieczeństwo)


    ALE JEST DOBRE skompilować raz na jakiś czas projekt C w jakimkowliek innym środowisku niż zwykle. Zwykle jest pouczające.



    *) Jakby świadomie chcieć powoływac podproces dla wyższych celów, system() jest bardziej kosztowne (niź spawnxxxx execxxxx) i daje mniejszą kontrolę. Wywołuje shella w pewnych defaultach, a co efektywnie się stanie "bozia raczy wiedzieć"

    0
  • #15 07 Wrz 2016 17:16
    EmbeddedProgramming
    Poziom 8  

    Kod: c
    Zaloguj się, aby zobaczyć kod

    0
  • #16 07 Wrz 2016 17:42
    JacekCz
    Poziom 36  

    EmbeddedProgramming napisał:
    Kod: c
    Zaloguj się, aby zobaczyć kod


    O! Fajne "ortodoksyjne" C++ w chyba aktualnych standardach (nie jestem rygorystą)

    Przyznacie jednak, że właśnie takie C++ nie jest dobrym materiałem do dydaktyki (jako język generalnej edukacji np szk.średniego)

    0
  • #17 07 Wrz 2016 23:05
    EmbeddedProgramming
    Poziom 8  

    Według mnie nauki nie powinno się zaczynać ani od C ani od C++, że tak powiem są to języki "nieprzyjazne" dla wszystkich którzy zaczynają się ich uczyć, a co mówić dla kogoś kto nie miał żadnego kontaktu z programowaniem. No, ale my nie mamy wpływu na to co rodzi się w głowach ludzi którzy ustalają materiał przerabiany na zajęciach.

    0
  • #18 08 Wrz 2016 01:10
    pawel1148
    Poziom 20  

    EmbeddedProgramming napisał:
    Według mnie nauki nie powinno się zaczynać ani od C ani od C++, że tak powiem są to języki "nieprzyjazne" dla wszystkich którzy zaczynają się ich uczyć, a co mówić dla kogoś kto nie miał żadnego kontaktu z programowaniem. No, ale my nie mamy wpływu na to co rodzi się w głowach ludzi którzy ustalają materiał przerabiany na zajęciach.

    Co więc Twoim zdaniem powinno zaczynać naukę programowania ?? Ja osobiście zaczynałem od C++, naskrobałem trochę programów dla zabawy w 5 klasie podstawówki(część strukturalną bo obiektów nie obczaiłem). I bardzo podobał mi się ten język programowania.
    Później uczyłem się kolejno w HTML, LOGO(Ten, który tak hucznie niedawno ,,wprowadzali", uczyli na lekcjach informatyki w gimnazjum), php(zrezygnowałem, bo to za dużo na gimnazjalistę), assemblera (8051), Ladder/ST, C, teraz za Jave się biorę powoli, ale zacząłęm od dokończenia Symfonii C++, bo w ten sposób łatwiej idzie(szczególnie że książka którą wybrałem jest dla programistów umiejących C++ i pokazuje Jave na zasadzie porównań w wielu miejscach). Ogólnie uważam że najważniejszy w tym wszystkim był właśnie ten C++. Częściowo też Assembler był wartościowy, bo bardzo fajnie pokazuje architekturę tego już leciwego procesora.

    Może też częściowo było mi łatwiej, bo uczyłem się z książki- internet wtedy raczej zawierał więcej porno aniżeli książek/tutoriali. To w sumie książka była jeszcze przed standardem C++(mniej było pisania dla helloworld nieznanych sformułowań). Za to używało się <iostream> ew. string a nie wrzucało biblioteki z C.
    Co nie znaczy że teraz nauka programowania przez dostęp do internetu jest łatwiejsza. Jak już ktoś napisał poszczególne środowiska różnie reagują na drobne błędy. DEV C++ z tego co pamiętam przysparzał mi najwięcej problemów z dziwnymi czasami błędami(gc++ najmniej). Uczenie się z internetu to moim zdaniem trochę takie stąpanie po minach, wolę jednak przestarzałe papierowe książki.

    Moim zdaniem powinno się powyrzucać pascala ze wszystkich szkół/uczelni. Bo uczenie tego to dla mnie wstyd. Może jest prostszy od C ( co jest kwestą sporną ). Dlaczego więc tak źle mówię o tym języku programowania ?? Bo ma inną składnie niż C. A o składnie C i C++ opiera się większość nowych języków programowania np. PHP, Java. I na dobrą sprawę jakby dzieciak chciał sobie ,,napisać grę" w tym języku, to biblioteki są tak słabe że będzie padaka a nie gra.

    0
  • #19 08 Wrz 2016 09:58
    JacekCz
    Poziom 36  

    pawel1148 napisał:
    EmbeddedProgramming napisał:
    Według mnie nauki nie powinno się zaczynać ani od C ani od C++, że tak powiem są to języki "nieprzyjazne" dla wszystkich którzy zaczynają się ich uczyć, a co mówić dla kogoś kto nie miał żadnego kontaktu z programowaniem. No, ale my nie mamy wpływu na to co rodzi się w głowach ludzi którzy ustalają materiał przerabiany na zajęciach.

    Co więc Twoim zdaniem powinno zaczynać naukę programowania ?? Ja osobiście zaczynałem od C++, naskrobałem trochę programów dla zabawy w 5 klasie podstawówki(część strukturalną bo obiektów nie obczaiłem). I bardzo podobał mi się ten język programowania.


    Zgodnie regułą Pareto 10% ludzi coś chce (Ty + uczyć się C) a reszta jest do tego zmuszona. > 90% Twoich kolegów zaczęło by zdanie "MUSZĘ (czasem podają termin) wykonać takie zadanie".

    Z krytycyzmu C/C++ wywodzi się Java **), z niej inspirowany C# ***) (dział prawny kazał zmienić nazwę z J# na C#, ale to nie jest żadne C). Liczne interpretery. Lua, Python (PHP nie, ma strasznie rozp... ekosystem), klony Basiców (te dobre). Znienawidzone Microsoft Basic for Applications

    Na pewno jezyk do dydaktyki musi mieć automatyczne zarządzanie pamięcią, bezpieczeństwo. Wszystkie skutki określone (C ma więcej UB niż określonych) co pewnie pociągnie wymóg maszyny wirtualnej.
    Pożądane odrzucenie nadmiaru syntaktycznego (taki ma profesjonalne C++)

    Moje własne zdanie, pierwsza wiedza nie musi się idealnie wprost przedłużać w uprawianą w zawodzie. Uczący się architektury który klei z papieru, by potem nigdy już tego nie robic itd... Gdyby pierwszy język w ogóle nie miał kontynuacji "przemysłowej" ja bym nie płakał. Mój pierwszy język wykładów z algorytmiki to basic z numerami linii oraz na kartkach (takie lata). Nigdy go nie kontynuowałem *) i nie uważam aby uczelnia mnie skrzywdziła, to był bardzo dobry wybór.

    a) ktoś rozwijający się na programistę i tak sam dociągnie wiedzę w zakresie kolejnych języków. Po 50 (obojętnie, 200, bez znaczenia) godzinach szkolnych zajęć z C statystyczny absolwent jest raczej obiektem uśmieszków i kulą u nogi w firmie. Jak ten wątek wskazuje, szkoła nie uczy dobrego C, a to jest jak z pływaniem, tańcem i nartami, lepiej nie umieć, niż umieć źle.

    b) ktoś do tego "zmuszony" uzna VBA że to zbyt wiele.

    *) poza tematem Spectrum i Atari udostępnione między 3 a 5 w nocy przez kolegów.

    **) Obok gdzieś dyskutuję w wątku np "trzeci język programowania daje głębokie zrozumienie pierwszego". Bardzo rozwijające jako programista C++ jest poznać design ekosystemu Javy, decyzje projektowe i felietony krytykujące C/C++

    ***) C# poparł olbrzymią większość decyzji projektowych Javy. Ciekawe jest nawet nie to, co zrobili lepiej (oczywiste, po 10 latach póżniej), ale to gdzie nieco się wycofali albo utworzyli furtki wstecz (zamknięte na skobelek).

    0
  • #20 08 Wrz 2016 11:10
    Werpet
    Poziom 4  

    Zamyka program przy kompilowaniu.

    "Program g++.exe przestał działać."

    Krzysztof Gustaw napisał:
    Witam!
    Zainstalowałem devCpp i TURBO C++ (normalnie korzystam z Pelles C)
    Wklejam sprawdzony i działający kod dla DevCpp:
    Kod: c
    Zaloguj się, aby zobaczyć kod

    0
  • #21 08 Wrz 2016 11:42
    JacekCz
    Poziom 36  

    Werpet napisał:
    Zamyka program przy kompilowaniu.

    "Program g++.exe przestał działać."

    Krzysztof Gustaw napisał:
    Witam!
    Zainstalowałem devCpp i TURBO C++ (normalnie korzystam z Pelles C)
    Wklejam sprawdzony i działający kod dla DevCpp:


    KIEDY przestało działać?

    jestem w zasadzie pewien, że nie jest to związane ze źródłami kompilowanego programu.
    Kłócące się różne IDE C/C++ już widziałem, choć wylot jak tu mi się nie zdarzył.

    OSTATNIE co bym zalecał, to instalacje/reinstalacje na oślep. Trzeba zrozumieć przyczynę.

    0
  • #22 08 Wrz 2016 11:52
    EmbeddedProgramming
    Poziom 8  

    Kod działa, jest tylko redeklaracja zmiennej liczba, ale problem nie leży po stronie kodu.

    0
  • #23 08 Wrz 2016 11:53
    Werpet
    Poziom 4  

    Działa, reinstall pomógł. A mam pytanie jak zrobić identyczny program tylko żeby liczył średnią dla dwóch kolumn? Np.

    3 (tab) 6
    7 (tab 2
    8 (tab) 4
    4 (tab) 3

    0
  • #24 08 Wrz 2016 11:57
    EmbeddedProgramming
    Poziom 8  

    Na podstawie podzielności n bez reszty przez 2, dodawaj odczytane liczby naprzemiennie do sum1 i sum2 powiedzmy.

    Kod: c
    Zaloguj się, aby zobaczyć kod

    0
  • #25 08 Wrz 2016 12:01
    Werpet
    Poziom 4  

    Sumę1 i sumę2 bym ogarnął, ale zmiennej uint nigdy nie używałem :(

    0
  • #26 08 Wrz 2016 12:03
    EmbeddedProgramming
    Poziom 8  

    uint - unsigned int, nieważne zresztą. Użyj n - nie wiem czemu mi się uroiła dodatkowa zmienna :) Na górze masz poprawione już

    0
  • #28 08 Wrz 2016 12:16
    EmbeddedProgramming
    Poziom 8  

    Sztandar18 napisał:
    I dlatego w takich zadaniach wolę PHP :)
    http://ideone.com/HqowjW

    Ewentualnie zrób właśnie tak :) Unikniesz dodatkowych obrotów pętli.
    Kod: c
    Zaloguj się, aby zobaczyć kod

    0
  • #29 08 Wrz 2016 12:21
    Werpet
    Poziom 4  

    I w który fragment kodu to wkleić?

    Kod: c
    Zaloguj się, aby zobaczyć kod


    EmbeddedProgramming napisał:
    Sztandar18 napisał:
    I dlatego w takich zadaniach wolę PHP :)
    http://ideone.com/HqowjW

    Ewentualnie zrób właśnie tak :) Unikniesz dodatkowych obrotów pętli.
    Kod: c
    Zaloguj się, aby zobaczyć kod

    0
  • #30 08 Wrz 2016 12:23
    EmbeddedProgramming
    Poziom 8  

    Werpet napisał:
    I w który fragment kodu to wkleić?

    Kod: c
    Zaloguj się, aby zobaczyć kod


    EmbeddedProgramming napisał:
    Sztandar18 napisał:
    I dlatego w takich zadaniach wolę PHP :)
    http://ideone.com/HqowjW

    Ewentualnie zrób właśnie tak :) Unikniesz dodatkowych obrotów pętli.
    Kod: c
    Zaloguj się, aby zobaczyć kod

    W to samo miejsce gdzie teraz dokonujesz odczytu liczb - oczywiście zmień nazwy zmiennych na swoje.

    0