Prośba o spr. poprawności komentarzy

2011-09-16 22:02
LucjanuSz
0

Witam
Czy mógłby mi ktoś sprawdzić, czy moje komenarze są w miare poprawne.
Niestety nie robiliśmy tego na informatyce w szkole.
Za każda treść merytoryczna jestem wdzięczny :)

/*Napisz program, który przepisujac wejscie na wyjscie -będzie zastępować jednym znakiem odstepu
każdy ciąg złożony z jednego lub kilku takich znaków*/

// Nazwe pliku tekstowergo z, którego chcemy wczytac dane podaje użytkownik

#include <iostream>
#include <fstream>
#include <string> // funkcja c_str()
#include <cstdlib> // funkcja pause

using namespace std;

int main()
{
/*Napisz program, który z wejścia na wyjscie przepisuje ciagi znakow bez powtórzen*/
// Np dla słowa aaabccd wypisze abcd
// Plik z danymi do przetworzenia podaje użytkownik

#include <iostream>
#include <fstream>
#include <string> // funkcja c_str()

using namespace std;

int main()
{
string nazwapliku;
char znakzapamietany; // zapamiętuje znak wcześniejszy
char znak; //znak wczytany z pliku tekstowego

    cout << "Podaj nazwe pliku, z którego chcesz wczytac dane " << endl;
    cin >> nazwapliku;
    ifstream plik(nazwapliku.c_str());
    //Sprawdzam czy poprawnie otworzyłem plik tekstowy
    if(!plik)
    {

        cout<<" Nie udalo mi się otworzyc pliku " << endl;

    }
    else
    {

        plik >> noskipws; // Nie pomijam białych znaków
        plik >> znak;
        plik >> znakzapamietany;

        //Wczytuje dane znak po znaku aż do końca pliku
        while( !plik.eof() )
        {

            // gdy znak wcześniejszy i aktualnie wczytany jest sobie rowne
            if((znakzapamietany == znak))
            {
                // przesuniecie wskaźnika z wczytwanie o kolejny znak
                plik >> noskipws;
                plik >> znak;

            }
            // gdy oba znaki sa rozne
            else
            {

                znakzapamietany = znak;
                cout << znak;
                plik >> noskipws;
                plik >> znak;

            }

        }

    }

return 0;
}
edytowany 1x, ostatnio: madmike, 2016-12-13 18:26
Co wypiszę dla pliku abbbbcccc? Przemyśl jeszcze strukturę programu. - Zjarek 2011-09-16 22:06
Dodatkowo zgodnie z treścią pierwszego komentarza ma przepisywać z wejścia na wyjście, a nie z pliku na wyjście. - Zjarek 2011-09-16 22:07
Zapoznaj się ze std::unique, wtedy program ma kilka linijek. - Endrju 2011-09-16 22:13

Pozostało 580 znaków

2011-09-16 22:14
Kumashiro
0
LucjanuSz napisał(a)

Czy mógłby mi ktoś sprawdzić, czy moje komenarze są w miare poprawne.


/*Napisz program, który przepisujac wejscie na wyjscie -będzie zastępować jednym znakiem odstepu
każdy ciąg złożony z jednego lub kilku takich znaków*/

// Nazwe pliku tekstowergo z, którego chcemy wczytac dane podaje użytkownik


Są poprawne składniowo, ale używasz dwóch rodzajów komentarza to jednego tekstu.
Zdecyduj się albo na komentarz jednoliniowy:

```cpp
// Napisz program, który przepisujac wejscie na wyjscie -będzie zastępować jednym znakiem odstepu
// każdy ciąg złożony z jednego lub kilku takich znaków
// Nazwe pliku tekstowergo z, którego chcemy wczytac dane podaje użytkownik

lub blokowy:

/* Napisz program, który przepisujac wejscie na wyjscie -będzie zastępować jednym znakiem odstepu
   każdy ciąg złożony z jednego lub kilku takich znaków
   Nazwe pliku tekstowergo z, którego chcemy wczytac dane podaje użytkownik */

Możesz też zaszaleć i przy dłuższych komentarzach użyć "boxed comment":

/***********************************************************************************
 *  Napisz program, który przepisujac wejscie na wyjscie -będzie zastępować jednym znakiem odstepu
 *  każdy ciąg złożony z jednego lub kilku takich znaków
 *  Nazwe pliku tekstowergo z, którego chcemy wczytac dane podaje użytkownik
 ***********************************************************************************/

Niektóre narzędzia do generowania dokumentacji wymagają określonego formatu komentarzy, np:

/***
    Napisz program, który przepisujac wejscie na wyjscie -będzie zastępować jednym znakiem odstepu
    każdy ciąg złożony z jednego lub kilku takich znaków
    Nazwe pliku tekstowergo z, którego chcemy wczytac dane podaje użytkownik
 */

Dobre edytory kodu mają możliwość podświetlania komentarzy innym kolorem (nawet zależnie od typu komentarza), dlatego lepiej trzymać się jednej konwencji przy tekstach wielolinijkowych.

Reszta - patrz komentarze Zjarka.

Pewnie komentarze /**/ to nauczyciel a // to wkład własny - msm 2011-09-17 20:25

Pozostało 580 znaków

2011-09-16 22:34
0

#include <cstdlib> // funkcja pause
Po co? Przecież w <iostream> znajduje się funkcja system(). Wystarczy ją uruchomić z parametrem

system("pause");

Gdy się nie wie, co się robi, to dzieją się takie rzeczy, że się nie wie, co się dzieje ;-)
??????????????????? Co miałaby robić funkcja system w iostream? Jest w cstdlib. Do tego jest to rozwiązanie specyficzne dla windowsa. - Zjarek 2011-09-16 22:42
nie lepiej byłoby użyć cin.get() na końcu zamiast dołączać kolejnego includa? - złoty 2011-09-16 23:01
cin.get() to też akurat <iostream>. No funkcja system bez załączonej biblioteki iostream daje błąd kompilacji, bo nie zna takiej funkcji. Wydaje mi się, że system("pause") jest akurat uniwersalne na windowsa jak i na linuxa i macOS. Przy system("CLS") i system("clear") owszem jest różnica - MJay 2011-09-16 23:32
Na Linuksie nie ma komendy "pause". Na MacOSX zapewne też. - Kumashiro 2011-09-16 23:43
Funkcja std::system nawet z załączoną biblioteką iostream, a bez cstdlib daje błąd kompilacji na g++. Dodatkowo: "bash: pause: nie znaleziono polecenia". I co by było gdyby w folderze z aplikacją ktoś wrzucił program pause.exe? - Zjarek 2011-09-16 23:43
To w takim układzie wybaczcie, mój błąd - MJay 2011-09-17 00:44

Pozostało 580 znaków

2011-09-17 15:37
sig
0

Co do zdecydowania się na któryś typ to sugerował bym liniowy, coby blokowy móc stosować do chwilowego "wyłączania" całych bloków kodu np celem przetestowania alternatywy (zagnieżdżanie się takowych nie każdy kompilator przepuści, natomiast liniowe wewnątrz blokowego jak najbardziej mogą być)

Do wyłączania blokowego to często się używa preprocesora i #if 0 / #endif. Albo zawsze pozostaje system kontroli wersji. - Zjarek 2011-09-17 18:05

Pozostało 580 znaków

2011-09-17 21:34
0

No i w sumie nikt nie napisał najważniejszej rzeczy: większość z tych komentarzy jest niepotrzebna, tylko zaciemnia kod i wprowadza dodatkowy narzut pracy nad ich utrzymaniem. Zmienisz coś w kodzie - wypadałoby zmienić komentarz, żeby nie był mylący, a o tym łatwo zapomnieć.

Kod powinien być kodem samokomentującym się i komentarze wrzucane tylko tam, gdzie rzeczywiście mają sens. Nazwy zmiennych powinny mówić do czego dana zmienna służy, podobnie jak nazwy funkcji itd.

Lepiej by było tak:

int main()
{
string nazwaPliku;
char znakZapamietany;
char aktualnyZnak;

    cout << "Podaj nazwe pliku, z którego chcesz wczytac dane " << endl;
    cin >> nazwapliku;
    ifstream plik(nazwaPliku.c_str());
    if(!plik)
    {

        cout<<" Nie udalo mi się otworzyc pliku " << endl;

    }
    else
    {

        plik >> noskipws; // Nie pomijam białych znaków
        plik >> aktualnyZnak;
        plik >> znakZapamietany;

        while( !plik.eof() )
        {

            if((znakZapamietany == aktualnyZnak))
            {
                // przesuniecie wskaźnika z wczytwanie o kolejny znak
                plik >> noskipws;
                plik >> aktualnyZnak;

            }
            else
            {

                znakZapamietany = aktualnyZnak;
                cout << aktualnyZnak;
                plik >> noskipws;
                plik >> aktualnyZnak;

            }

        }

    }

return 0;
}

Nie zwracałem uwagi na to czy kod poprawnie realizuje zadanie.


edytowany 1x, ostatnio: byku_guzio, 2011-09-17 21:35

Pozostało 580 znaków

Liczba odpowiedzi na stronę

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