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

znajdowanie max i min

VPS Starter Arubacloud
0 głosów
1,322 wizyt
pytanie zadane 14 maja 2016 w C i C++ przez Evelek Nałogowiec (28,960 p.)

Mam algorytm na sprawdzanie max i min wartości z pliku tekstowego. Algorytm działa poprawnie, kiedy w pliku tekstowym jest 1000 liczb (w którym znajdują się liczby nawet 250-cyfrowe). Kiedy jest w nim 5000 liczb (max 9-cyfrowe) to wypisuje bzdury. Nie rozumiem tego, bo powinien działać poprawnie...

#include <iostream>
#include <fstream>
#include <string>
using namespace std;
int main()
{
    fstream plik;
    plik.open("dane.txt", ios::in);
    string liczba, pomMax, pomMin;
    int nrMax = 1;
    int nrMin = 1;
    while(!plik.eof())
    {
        plik >> liczba;
        pomMax = pomMin = liczba;

        for(int i=2; i<5001; i++)
        {
            plik >>liczba;
            if(liczba.size() > pomMax.size())
            {
                pomMax = liczba;
                nrMax = i;
            }
            else if(liczba.size()==pomMax.size())
                if(liczba > pomMax)
                {
                    pomMax = liczba;
                    nrMax = i;
                }
            if(liczba.size() < pomMin.size())
            {
                pomMin = liczba;
                nrMin = i;
            }
            else if(liczba.size()==pomMin.size())
                if(liczba < pomMin)
                {
                    pomMin = liczba;
                    nrMin = i;
                }
        }
    }
    cout << "Najmniejsza liczba znajduje sie w linii numer: " << nrMin << endl;
    cout << "Najwieksza liczba znajduje sie w linii numer: " << nrMax << endl;
    cout << pomMax << endl;
    cout << pomMin << endl;
    plik.close();
    return 0;
}

 

1 odpowiedź

0 głosów
odpowiedź 14 maja 2016 przez jankustosz1 Nałogowiec (35,880 p.)
nie chce mi się na to patrzeć ale tak zgrubsza

ogólnie to ciekawy pomysł sprawdzać który string ma więcej znaków ten przechowuje większa liczbę, ale jest jak oba stringi będą miały po tyle samo znaków (załóżmy 20) to będzie bład bo wyjdzie poza zasięg inta, więc nie pisz że dla 250 znaków pójdzie.

linia 19 już raz przeczytałeś to 3 linie wcześniej, chcesz aby czytało 5 tyś wyrazów z pliku nie ważne czy istnieją czy nie, kompletnie nie rozumiem jaki jest cel robienia tego fora

Jest masa błędów logicznych w każdym jednym ifie.

 

Najlepiej usuń to i napisz jeszcze raz i pisz komentarze żebyś wiedział co robisz.
komentarz 14 maja 2016 przez Evelek Nałogowiec (28,960 p.)
Liczby nie są przechowywane w int tylko w string. String też umożliwia na ich porównywanie.

Powtórne wczytanie plik >> liczba jest tu konieczne.

Nie ma tu błędów logicznych.
komentarz 14 maja 2016 przez jankustosz1 Nałogowiec (35,880 p.)

Jest masa błędów, najpierw usuń fora potem usuniesz zmienną "i" i pokolei naprawisz. 

"Liczby nie są przechowywane w int tylko w string. String też umożliwia na ich porównywanie.

jak zrobisz coś takiego:

string a("1"), b("13");

cout << a < b; 

to wyjdzie że b jest większe ale dlatego bo ma więcej znaków. Równie dobrze możesz porównać "a" do "aa", spróbuj se "10" i "11"

komentarz 15 maja 2016 przez Evelek Nałogowiec (28,960 p.)
Program działa poprawnie. Najwidoczniej miałem coś dopisanego niepotrzebnego.
komentarz 23 kwietnia 2017 przez Gankkah Użytkownik (720 p.)

Porównujesz 'stringi' "alfabetycznie".

 

Oczywiście "alfabetycznie" w cudzysłowie ponieważ stringi zastępują tablice 'char'.

A typ 'char' zamienia sobie z swojego typu na typ 'int' który porównuje.

 

Konwersja z typu 'char' na typ 'int' jest taka że brana pod uwagę jest nie wartość ale miejsce w tablicy ASCII.

Podobne pytania

0 głosów
1 odpowiedź 1,556 wizyt
pytanie zadane 29 maja 2018 w JavaScript przez C1chutki Nowicjusz (120 p.)
0 głosów
5 odpowiedzi 3,095 wizyt
pytanie zadane 10 marca 2018 w C i C++ przez giedymin33 Początkujący (290 p.)
0 głosów
1 odpowiedź 1,238 wizyt
pytanie zadane 19 grudnia 2017 w Java przez Ohnne Nowicjusz (180 p.)

92,451 zapytań

141,261 odpowiedzi

319,073 komentarzy

61,853 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

Akademia Sekuraka 2024 zapewnia dostęp do minimum 15 szkoleń online z bezpieczeństwa IT oraz dostęp także do materiałów z edycji Sekurak Academy z roku 2023!

Przy zakupie możecie skorzystać z kodu: pasja-akademia - użyjcie go w koszyku, a uzyskacie rabat -30% na bilety w wersji "Standard"! Więcej informacji na temat akademii 2024 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!

...