[C++] Wczytywanie, sortowanie, tablice

199402
Użytkownik
Użytkownik
Posty: 1
Rejestracja: 8 lut 2022, o 18:57
Płeć: Mężczyzna
wiek: 18

[C++] Wczytywanie, sortowanie, tablice

Post autor: 199402 »

Witam, mam do napisania program w c++, który sortuje n liczb wczytanych z klawiatury.
Powinien on zawierać trzy bezparametrowe funkcje: czytaj_dane(), przetworz_dane() i wyświetl_wynik().
Funkcja czytaj_dane() czyta dane wprowadzone z klawiatury i umieszcza je w tablicy o nazwie liczby.
Funkcja przetworz_dane() sortuje je według wybranego algorytmu (np. algorytmem bąbelkowym).
Funkcja wyświetl_wynik() prezentuje natomiast zawartość posortowanej tablicy liczby na ekranie monitora.

Niestety ominęło mnie kilka lekcji w technikum z powodu choroby i mam teraz problem z pracą domową, która jest już za 2 dni do oddania i obawiam się że nie dam rady jej sam zrobić. Czy mógłby ktoś mi to rozpisać albo przynajmniej jakoś w paru punktach wytłumaczyć?
Ostatnio zmieniony 8 lut 2022, o 21:13 przez Jan Kraszewski, łącznie zmieniany 2 razy.
Powód: Poprawa wiadomości.
Ponury123
Użytkownik
Użytkownik
Posty: 128
Rejestracja: 5 lip 2015, o 14:48
Płeć: Mężczyzna
Lokalizacja: nie wiem
Podziękował: 11 razy
Pomógł: 24 razy

Re: [C++] Wczytywanie, sortowanie, tablice

Post autor: Ponury123 »

Hmm, czyli na dzisiaj, no ale pewnie i tak Ci się przyda.

1. żeby wczytać liczbę z klawiatury potrzebujesz standardowy strumień wejścia cin poczytaj sobie o strumieniach wejścia i wyjścia.
2. żeby wczytywać n liczby z klawiatury potrzebujesz pętle, możesz sobie przyjąć, że pętle kończy jakiś znak, choć najlepiej jakbyś wykorzystał EOF (ang. End of file). W każdym systemie wywołanie tego znaku będzie inne więc sprawdź jak to zrobić na swoim systemie.
Poczytaj sobie o pętlach samych w sobie, generalnie wyróżnijmy sobie póki co pętle for i while. Obie te konstrukcje to pętle czyli to co jest w ich ciałach będzie się wykonywać w pętli, no chyba, że nastąpi koniec poprzez spełnienie warunku. Pętla for zachowuje się tak, że wykonuje dana akcję jakąś zadaną ilość razy, podczas gdy pętla while wykonuje się tak długo, aż nie zostanie przerwana poprzez spełnienie warunku.

Czyli możesz podejść do zadania na dwa sposoby, pierwszy z wykorzystaniem pętli for, prosisz użytkownika o podanie liczby n, czyli ile liczb ma zamiar wpisać. Następnie wczytujesz n licz w pętli.

Kod: Zaznacz cały

   for (int i = 0; i < n; i++) { //dla n = 3 -> wykona się dla i = 0; i = 1; i = 2; dla i = 3 już się nie wykona bo warunek jest, że i ma być mniejsze od n
            //wczytaj liczbę i zapisz ją
        }
Albo podejście bardziej eleganckie z wykorzystaniem pętli while

Kod: Zaznacz cały

        int num = 0;
        while (cin >> num) { //wczytuje dopóki nie dostanie EOF albo złego typu danych
            // zapisz liczbę np. w tablicy
        }
zostaje też kwestia co jeśli użytkownik poda coś co nie jest liczbą, z tym też idzie sobie poradzić -> wyszukaj jak sprawdzić czy input to liczba.
powyższe załatwia Ci już prawie obsługę funkcji wczytaj_dane. Jest jedno ale, w poleceniu masz, że wpisane liczby masz umieszczać w tablicy o nazwie liczby, z tablicami jest taki problem, że przy inicjacji musisz podać ich rozmiar, jeśli użyjesz pętli for to nie ma problemu bo poznasz ilość liczb i możesz zainicjować tablicę, przy pętli while takiej informacji nie masz, rozwiązać to oczywiście można:
- sposób estetyczny -> zamiast tablicy użyj vektora;
- sposób brzydki, ale zgodny ze specyfikacją polecenia -> stwórz tablice o rozmiarze INT_MAX, a po wczytaniu wszystkich liczb zmień jej rozmiar, do faktycznej ilości. Jeśli chcesz być zgodny z poleceniem to osobiście zrezygnowałbym z pętli while i użył for będzie ładniej.

3. Jeśli nie wiesz jak zdeklarować funkcję to poczytaj o tym, generalnie interesuje Cię coś w stylu

Kod: Zaznacz cały

    
    private int[] przetworz_dane(int[] data){
        //sort data
        return data;
    }
Miej na uwadze, że fragmenty kodu, który Ci wrzucam to nie koniecznie C++, bardziej chodzi mi o koncepcję niż składnie danego języka. Widzisz, że powyższa funkcja jest typu int bo raczej chcemy aby można było do niej wrzucić jakaś tablicę liczb i dostać z powrotem wynik w postaci posortowanej tablicy, btw. nie jest napisane jak masz sam napisać algorytm sortujący więc śmiało korzystałbym z wbudowanych funkcji np.

Kod: Zaznacz cały

#include<algorithm>

sort(args) //poczytaj o funkcji sort

jeśli chcesz samemu sobie napisać funkcję do posortowania to poczytaj o sortowaniu bąbelkowym prosty algorytm, sam raz na pierwsze implementacje.

4. Zostało wyświetlenie danych w funkcji wyświetl_wynik() jak to zrobić to już powinieneś wiedzieć po przerobieniu strumieni wejścia/wyjścia i pętli.

Zachęcam do dalszej dyskusji i zadawania pytań, zamiast bycia kolejnym forumowym jednopostowcem liczącym na gotowca ;)
ODPOWIEDZ