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

Program do oceny i poprawy

Object Storage Arubacloud
0 głosów
283 wizyt
pytanie zadane 2 marca 2017 w C i C++ przez breeg Początkujący (390 p.)
#include <iostream>
#include <cstdlib>
#include <windows.h>
#include <math.h>
#include <fstream>
#include <time.h>
#include <conio.h>
using namespace std;

float weight,height,score,score1,a;
string line;
float bmi_score(float score); // liczy bmi
string reading(string line);//wczytuje date i bmi z pliku

int main()
{
    cout << "Program do obliczania Bmi!" << endl;
    cout << "--------------------------" << endl;

    int choice;
    string choice2="1";
    while(choice2!="2")         // petla ktora wraca do poczatku
    {
        cout<<"Co chcesz zrobic?!"<<endl;
        cout<<"1)Sprawdz swoje BMI!"<<endl;       // Pocz¹tek programu
        cout<<"2)Odczytaj zapisane BMI!"<<endl;
        cout<<"3)Wyjdz z programu!"<<endl;
        cout<<"Wybierz: ";
        cin>>choice;
        while (!cin.good())
        {
            cin.clear();
            cin.ignore(999, '\n');             //sprawdza poprawnosc znakow
            system("cls");
            cout<<"Zly znak..."<<endl;
            cout<<"1)Sprawdz swoje BMI!"<<endl;
            cout<<"2)Odczytaj zapisane BMI!"<<endl;
            cout<<"3)Wyjdz z programu!"<<endl;
            cout<<"Wybierz: ";
            cin >> choice;
        }
        if (choice!=1 && choice!=2 &&choice!=3)
        {
            cout<<"Wprowadzone zle liczby..."<<endl;
            Sleep(2000);
            system("cls");
        }
        else
        {

            system("cls");


            switch(choice)                            //wybór rozpoczecia
            {

            case 1:



                cout << "Podaj swoja wage(kg)! ";
                cin>>weight;                              //zmienne do BMI
                cout << "Podaj swoj wzrost(cm)! ";
                cin>>height;

                if (weight<=0 || height <=0)
                {
                    cout<<"Waga tak jak i wzrost musza byc wieksze od zera..."<<endl;      //Zabezpiecza przed podaniem liczby "0"
                }

                else
                {
                    cout<<"Twoje BMI!: ";
                    //wynik BMI
                    score=bmi_score(score);
                    cout<<score<<endl;

                    if (score<16)
                    {
                        cout<<"Wyglodzenie!"<<endl;
                    }
                    else if (score>=16 && score <=17)
                    {
                        cout<<"Od 16 Do 17 pkt."<<endl;
                        cout<<"Wychudzenie!"<<endl;

                    }                                                                                ////////warunki BMI

                    else if (score>17 && score <18.5)
                    {
                        cout<<"Od 17 Do 18.5 pkt."<<endl;
                        cout<<"Niedowaga!"<<endl;

                    }

                    else if (score>=18.5 && score <25)
                    {
                        cout<<"Od 18.5 Do 25 pkt."<<endl;
                        cout<<"Waga prawidlowa!"<<endl;

                    }

                    else if (score>=25 && score <30)
                    {
                        cout<<"Od 25 Do 30 pkt."<<endl;
                        cout<<"Nadwaga!"<<endl;

                    }

                    else if (score>=30 && score <35)
                    {
                        cout<<"Od 30 Do 35 pkt."<<endl;
                        cout<<"I stopien otylosci!"<<endl;

                    }

                    else if (score>35)
                    {
                        cout<<"Od 35 Do ~ pkt."<<endl;
                        cout<<"II stopien otylosci!"<<endl;

                    }
                }
                cout<<endl<<"Co chcesz teraz zrobic ?"<<endl;
                cout<<"1)Wroc do poczatku!"<<endl;
                cout<<"2)Wyjdz z programu!"<<endl;
                cout<<"Wybierz: ";
                                                             //wraca lub konczy program

                cin>>choice2;
                system("cls");

                if (choice2=="2")
                {
                    system("cls");
                    cout<<"Do zobaczenia !..."<<endl;
                    Sleep(3000);                         //wyjscie z programu
                    exit(0);
                }
                else if (choice2!="1" && choice2!="2")
                {
                    cout<<"Wprowadzony zly znak..."<<endl;
                    Sleep(3000);
                    system("cls");
                }


                break;

            case 2:

                cout<<reading(line)<<endl;
                cout<<"Kliknij 'dowolny klawisz'"<<endl;

                getch();                                          //wczytuje z pliku
                system("cls");

                break;


            case 3:

                system("cls");
                cout<<"Do zobaczenia !..."<<endl;
                Sleep(3000);                         //wyjscie z programu
                exit(0);

                break;



            }
        }
    }

    return 0;
}


float bmi_score(float score)
{
    score=weight/pow(height,2)*10000 ;                //liczy bmi

    time_t czas;
    time( & czas );                           //podaje dokładny czas
    char * data = ctime( & czas );



    fstream plik;
    plik.open("bmi.txt",ios::out | ios::app);                              // zapisuje bmi i date do pliku
    plik<<"BMI: "<<score<<" /Data-";
    plik<<data;
    plik.close();
    return score;
};

string reading(string line)
{
    fstream plik;
    plik.open("bmi.txt",ios::in);
    if(plik.good()==false)                     ////wczytuje date i bmi z pliku
    {
        cout<<"Plik nie istnieje .."<<endl;

    }


    while(getline(plik,line))
    {

        cout<<line<<endl;
    }
    plik.close();
    return line;
};

 

 

Proszę o jakąś ocene tego programu , a raczej o wskazówki co , jak i gdzie mozna by było poprawić lub zapisać inaczej . Dopiero zaczynam i to jeden z moich pierwszych programów

4 odpowiedzi

+1 głos
odpowiedź 2 marca 2017 przez niezalogowany

Piszesz w C++ więc:

#include <ctime>
#include <cmath>

// wyjątek
#include <windows.h>

Nie używaj zmiennych globalnych!

Nie używaj globalnie using namespace

...

Poczytaj oceny kodów innych użytkowników bo widzę typowe przypadłości kodów osób po kursie MZ

komentarz 2 marca 2017 przez Molester Bywalec (2,920 p.)
Kiedy się ludzie w końcu nauczą ...
0 głosów
odpowiedź 2 marca 2017 przez tangarr Mędrzec (154,860 p.)

Parametry przekazywane do funkcji bmi_score(float score) i reading(string line) nie mają racji bytu.
Przetestuj przykład:

#include <iostream>

int zla_funkcja(int a) {
    a = 1;
    return a;
}

void dobra_funkcja1(int &a) {
   a = 2;
}

int dobra_funkcja2() {
   int a = 3;
   return a;
}

int main() {
    int x = 999;
    int y = zla_funkcja(x);
    std::cout << "x=" << x << " y=" << y << std::endl;
    dobra_funkcja1(x);
    std::cout << "x=" << x << std::endl;
    x = dobra_funkcja2();
    std::cout << "x=" << x << std::endl;
    return 0;
}

 

0 głosów
odpowiedź 2 marca 2017 przez mokrowski Mędrzec (155,460 p.)

W swoim kodzie masz 2 główne kategorie możliwych poprawek

  1. Poprawki wynikające ze złej logiki programu
  2. Poprawki wynikające ze złego stosowania języka programowania

Ta 1 kategoria jest ważniejsza. Języka zawsze możesz się nauczyć (prędzej czy później) a jak będziesz tworzył kod nielogiczny to ... żaden język Ci nie pomoże :-/

Podziel program na funkcje. Np. linie 24-29 i 35-40. Czy widzisz podobieństwa? Nie warto wydzielić z tego kodu funkcji?

Doprowadź do sytuacji by kod w main() czytał się jak opowiadanie co program robi :-) Dla przykładu pseudo kod:

main()
wyswietl_naglowek()
int opcja = podaj_opcje()
if(opcja == poprawna) {
    uruchomienie_akcji(opcja)
} else {
    wyswietl_komunikat_błedu()
}
..... 

Nie dam Ci uwag odnośnie języka. To na obecnym etapie nie ma żadnego sensu.

0 głosów
odpowiedź 2 marca 2017 przez MararOn Bywalec (2,620 p.)

float bmi_score(float score)
{
    score=weight/pow(height,2)*10000 ;                //liczy bmi
 
    time_t czas;
    time( & czas );                           //podaje dokładny czas
    char * data = ctime( & czas );
 
 
 
    fstream plik;
    plik.open("bmi.txt",ios::out | ios::app);                              // zapisuje bmi i date do pliku
    plik<<"BMI: "<<score<<" /Data-";
    plik<<data;
    plik.close();
    return score;
};
 
string reading(string line)
{
    fstream plik;
    plik.open("bmi.txt",ios::in);
    if(plik.good()==false)                     ////wczytuje date i bmi z pliku
    {
        cout<<"Plik nie istnieje .."<<endl;
 
    }
 
 
    while(getline(plik,line))
    {
 
        cout<<line<<endl;
    }
    plik.close();
    return line;
};

Czemu tutaj przy zamykających klamrach są średniki? To funkcje, nie klasy ;p

Podobne pytania

0 głosów
1 odpowiedź 669 wizyt
pytanie zadane 23 grudnia 2017 w C i C++ przez Huberti Gaduła (4,500 p.)
0 głosów
2 odpowiedzi 191 wizyt
pytanie zadane 28 maja 2016 w Nasze projekty przez Bonhart228 Użytkownik (640 p.)
+3 głosów
1 odpowiedź 428 wizyt
pytanie zadane 13 sierpnia 2017 w Java przez Wi_ktos Bywalec (2,950 p.)

92,581 zapytań

141,433 odpowiedzi

319,666 komentarzy

61,966 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!

...