Ewentualna korekta progamu

0

Witam, jako iż uczę się programowania w c++ to po każdym obejrzanym robię zadania na podstawie tego co się nauczyłem.
Zadanie w skrócie: wczytywanie x liczb, znajdowanie największej i najmniejszej i wypisanie ile razy wystąpiła. Wyszło tak:

#include<iostream>
#include<cstdlib>
#include <stdio.h>
using namespace std;

int ile, najw, najm, ile_x=1,ile_y=1;

int main()
{
    cout << "Z ilu liczb chcesz wyznaczyc najwieksza?:";
    cin >> ile;

    cout << "Podaj 1 liczbe:";
    cin >> najw;
    najm = najw;
    int liczby[ile];

    for (int x=1; x<ile; x++)
    {
        cout << "Podaj "<<x+1<< " liczbe:";
        cin >> liczby[x];

        if (najw>liczby[x])
            najw =najw;
        else if (najw<liczby[x])
            najw = liczby[x];
    }
    for (int x=1; x<ile; x++)
    {
        if (najm>liczby[x])
            najm = liczby[x];
        else if (najm<liczby[x])
            najm = najm;
    }
    for (int x=1; x<ile; x++)
    {
        if (liczby[x]==najw)
            ile_x++;
        else if (liczby[x]==najm)
            ile_y++;
         if (liczby[x]==najm)
        {
            cout << "Najwieksza a zarazem najmniejsza liczba to:"<<najm;
            cout << " wystepuje: "<<ile<< " razy";
            break;
        }

    if (ile_x-1==1&&(ile_y==1))
    {
        cout << "Najweksza liczba to: "<<najw<< ", wystepuje "<<ile_x-1<<" raz, najmniejsza jest: "<<najm<< " wystepuje "<<ile_y<< " raz.";
    }

    else if ((ile_x==1&&ile_y!=1))
    {
        cout << "Najweksza liczba to: "<<najw<< ", wystepuje "<<ile_x-1<<" raz, najmniejsza jest: "<<najm<< " wystepuje "<<ile_y<< " razy.";

    }
    else if ((ile_x!=1&&ile_y==1))
    {
        cout << "Najweksza liczba to: "<<najw<< ", wystepuje "<<ile_x-1<<" razy, najmniejsza jest: "<<najm<< " wystepuje "<<ile_y<< " raz.";
    }
    }
    getchar();getchar();
}

Myslę, czy taki prosty program musiał zająć aż tyle linijek? Może popełniam błędy w kodowaniu. Dziękuję za odpowiedzi.

2

Gdybyś użył funkcji i podzielił sobie ten kod na mniejsze fragmenty, to wyszłoby mniej kodu, a jego czytelność by wzrosła. Uczyłeś się już co nieco na temat funkcji? No i przydałoby się ten kod sformatować, bo klamry pouciekały.

Poza tym, czemu wyniki wyświetlasz w pętli, skoro masz to zrobić na sam koniec?

0
#include <iostream>
#include <vector>
#include <algorithm>

using namespace std;

int main()
{
    cout << "Podaj ilosc liczb: ";
    int a {0};
    cin >> a;
    vector<int> liczby(a);
    for (int i=0; i!=a; ++i)
        cin >> liczby[i];
    sort(liczby.begin(), liczby.end(),[](int a, int b){ return a>b; });
    cout << "Najwieksza liczba to " << liczby[0] << ".\n";
    sort(liczby.begin(), liczby.end(),[](int a, int b){ return a<b; });
     cout << "Najmniejsza liczba to " << liczby[0] << ".\n";
    return 0;
}
0

U mnie w Code Blocksie wywala błąd, jeszcze nie mam pojęcia czym jest spowodowany.

Co do funkcji to jeszcze do nich nie dotarłem. Chcę wyszlifować to co umiem do tej pory i potem przejść dalej. Obecnie jestem na etapie switcha i plików tekstowych. Kiedys jednak cos o nich oglądałem, wiem na czym polegają ale pewnie nie umiałbym napisać jej poprawnie.

1

U mnie w Code Blocksie wywala błąd,

Jaki błąd? Bądź precyzjny - jak przychodzisz do lekarza, to mówisz, że się wywalasz, czy że boli Cię to, to i tu?

jeszcze nie mam pojęcia czym jest spowodowany

Bo nie debug'ujesz i nie testujesz swojego kodu. Linijka po linijce, jest wiele metod, a często IDE ma wbudowany debugger.


Co do kodu: Pomijasz pierwszy element swoich tablic: for (int x=1; x<ile; x++)
Elementy w tablicach numeruje się od zera, czyli: for (int x=0; x<ile; x++).

Nazywaj też swoje zmienne tym czym są. Zmienna ile nic nie mówi. ile czego?

0

Jest fajnie. Miałeś już generowanie liczb pseudolosowych, albo wczytywanie z pliku? Najlepiej to byłoby, aby twój program wczytywal z pliku zbiór danych i dopiero wówczas znajdował max i min. Takie podawanie to wiesz... Niby działa, ale jest męczące i ciężko coś sprawdzić dla dużego zbioru.

0

@czarny Kura to jak już tak czarujesz stl'em to może:

#include <algorithm>
#include <iostream>
#include <iterator>
#include <vector>

int main() {
	std::vector<int> nums((std::istream_iterator<int>(std::cin)), std::istream_iterator<int>());
	std::cout << "max: " << *std::max_element(std::begin(nums), std::end(nums)) << std::endl;
	std::cout << "min: " << *std::min_element(std::begin(nums), std::end(nums)) << std::endl;

	return 0;
}
0

Prawie dobrze poza typowym dla początkujących przekombinowywaniem, żeby nie straszyć jakimiś funkcjami lambada itp i za dużo nie gadać przykład:

#include<iostream>
using namespace std;
 
int main()
{
    int ile, najw, najm, ile_najw = 0, ile_najm = 0;
	
    cout << "Z ilu liczb chcesz wyznaczyc najwieksza?:";
    cin >> ile;
    int liczby[ile];
	
    cout << "Podaj 1 liczbe:";
    cin >> liczby[0];
    najm = najw = liczby[0];
 
    for (int i = 1; i < ile; i++)
    {
        cout << "Podaj " << i+1 << " liczbe:";
        cin >> liczby[i];
 
        if (najw < liczby[i]) najw = liczby[i];
        if (najm > liczby[i]) najm = liczby[i];
    }
	
    for (int i = 0; i < ile; i++)
    {
        if (liczby[i] == najw) ile_najw++;
        else if (liczby[i] == najm) ile_najm++;
    }
 
    if ((ile_najw == 1) && (ile_najm == 1))
        cout << "Najweksza liczba to: " << najw << ", wystepuje raz, najmniejsza jest: " << najm << " wystepuje raz.\n";
 
    else if ((ile_najw == 1) && (ile_najm != 1))
        cout << "Najweksza liczba to: " << najw << ", wystepuje raz, najmniejsza jest: " << najm << " wystepuje " << ile_najm << " razy.\n";
		
    else if ((ile_najw != 1) && (ile_najm == 1))
        cout << "Najweksza liczba to: " << najw << ", wystepuje " << ile_najw << " razy, najmniejsza jest: " << najm << " wystepuje raz.\n";
	
    else
        cout << "Najweksza liczba to: " << najw << ", wystepuje " << ile_najw << " razy, najmniejsza jest: " << najm << " wystepuje " << ile_najm << " razy.\n";
	
    return 0;
}
0

Bardzo dziękuję wszystkim za odpowiedzi :) Przerobiłem jeszcze kilka zadań i lecę dalej z tematem.

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