Skocz do zawartości

C++ Pomoc dla początkującego


for3st
 Udostępnij

Przejdź do rozwiązania Rozwiązane przez Pankrok,

Rekomendowane odpowiedzi

Dzień dobry. Potrzebuje pomocy z zadaniem z C++

"Użytkownik może podawać długości odcinków w dowolnej kolejności, natomiast Ty zastosujesz algorytm sortowania wartości trzech zmiennych. Możesz go także zmodyfikować tak, żeby wartości były sortowane malejąco."

Pierwsza część działa, natomiast nie sortuje mi tych odcinków

Na dole załączyłem mój kod

#include <iostream>
#include <cstdlib>

using namespace std;

int main(int argc, char** argv) {
		
	
cout << "Program sprawdza czy z podanych odcinkow mozna zbudowac trojkat\n" ;	
		"\nPodaj dlugosci kolejnych odcinkow\n" ;

float a, b, c;
cout <<"\n\ta = "; cin >> a;
cout <<"\n\tb = "; cin >> b;
cout <<"\n\tc = "; cin >> c;

if (a*a + b*b == c*c || a*a + c*c == b*b || b*b + c*c == a*a) cout << "\nZ podanych odcinkow mozna zbudowac trojkat\n";
    else cout << "\nZ podanych odcinkow nie mozna zbudowac trojkata\n";
    
float temp;
cout <<"\nOto posortowane odcinki w kolejnosci malejacej\n";

if (a > b) {
    temp = a; a = b; b = temp;
    } 
if (a > c) {
    temp = a; a = c; c = temp;
    }
if (b > c) {
    temp = b; b = c; c = temp;
    }
    
    
	cout << endl;
    system("pause");
	return 0;
}
Odnośnik do komentarza
Udostępnij na innych stronach

  • Ekspert
  • Rozwiązanie

Pierwszej cześć nie sprawdzałem, 2gą wykonałbym w ten sposób:

#include <algorithm>
#include <iostream>
#include <cstdlib>

using namespace std;

int main(int argc, char** argv) {
		
	
cout << "Program sprawdza czy z podanych odcinkow mozna zbudowac trojkat\n" ;	
		"\nPodaj dlugosci kolejnych odcinkow\n" ;

float a, b, c;
cout <<"\n\ta = "; cin >> a;
cout <<"\n\tb = "; cin >> b;
cout <<"\n\tc = "; cin >> c;

if (a*a + b*b == c*c || a*a + c*c == b*b || b*b + c*c == a*a) cout << "\nZ podanych odcinkow mozna zbudowac trojkat\n";
    else cout << "\nZ podanych odcinkow nie mozna zbudowac trojkata\n";
    
float temp;
cout <<"\nOto posortowane odcinki w kolejnosci malejacej\n";

float arr[] = {a, b, c};
 
    sort(arr, arr + 3);
 
    for (int i = 2; i >= 0; i--)
    {
        cout << arr[i] << " ";
    }
    
	cout << endl;
    system("pause");
	return 0;
}
Odnośnik do komentarza
Udostępnij na innych stronach

Dodalem podpunkty , ale nie potrafie przeniesc liczb do odpowiedniego miejsca 

#include <iostream>
#include <cstdlib>
#include <algorithm>
#include <string>



using namespace std;
    

int main(int argc, char** argv) {
		
	
cout << "Program sprawdza czy z podanych odcinkow mozna zbudowac trojkat\n" ;	
		"\nPodaj dlugosci kolejnych odcinkow\n" ;

float a, b, c;
cout <<"\n\ta = "; cin >> a;
cout <<"\n\tb = "; cin >> b;
cout <<"\n\tc = "; cin >> c;

if (a*a + b*b == c*c || a*a + c*c == b*b || b*b + c*c == a*a) cout << "\nZ podanych odcinkow mozna zbudowac trojkat\n";
    else cout << "\nZ podanych odcinkow nie mozna zbudowac trojkata\n";
    
//Po sortowaniu


float arr[] = {a, b, c}; cout <<"\nPosortowane dlugosci odcinkow\n"; 

 
    sort(arr, arr + 3); 
 
    for (int i = 2; i >= 0; i--) 
    
    {
        
        cout << arr[i] <<" " <<"\n\ta = \n";
    	 }


 
 

    


	





	cout << endl;
    system("pause");
	return 0;
}
Odnośnik do komentarza
Udostępnij na innych stronach

  • Ekspert

Zakładam że program ma zwrócić informację o kolejności z nazwami odcinków, w tym wypadku powinieneś poszukać jak posortować dane w wektorze do którego przypisane są pary. Podejrzewam że nie chodzi o budowę trójkąta prostokątnego tylko dowolnego trójkąta. Zgodnie z matematyką trójkąt można zbudować jeśli długość dłuższego boku jest mniejsza niż suma pozostałych boków, więc twój wzór jest błędny. Zachęcam żebyś sam spróbował znaleźć rozwiązanie i dopiero potem zaglądną do spojlera. Podpowiem zę przyda się typedef, pair, vector i sort 🙂

Spoiler
#include <iostream>
#include <map>
#include <vector>
#include <algorithm>

typedef std::pair<char, int> pair;

int main()
{
    float temp;
    float sum = 0;
    std::vector<pair> vec;
    std::cout << "Program sprawdza czy z podanych odcinkow mozna zbudowac trojkat\n" ;
		"\nPodaj dlugosci kolejnych odcinkow\n" ;
    std::cout <<"\n\ta = ";
    std::cin >> temp;
    vec.push_back(pair('a', temp));
    std::cout <<"\n\tb = ";
    std::cin >> temp;
    vec.push_back(pair('b', temp));
    std::cout <<"\n\tc = ";
    std::cin >> temp;
    vec.push_back(pair('c', temp));

    std::sort(vec.begin(), vec.end(),
            [](const pair &l, const pair &r)
            {
                if (l.second != r.second) {
                    return l.second < r.second;
                }

                return l.first < r.first;
            });

    std::cout <<"\n#-----\nOto posortowane odcinki w kolejnosci malejacej ";
    for (auto const &pair: vec) {
        std::cout << "\n\t" << pair.first << " = " << pair.second;
        if (pair.second == vec.back().second) {
            if (pair.second < sum) {
            std::cout << "\n#-----\nZ podanych odcinkow mozna zbudowac trojkat\n";
            } else {
                std::cout << "\nZ podanych odcinkow nie mozna zbudowac trojkata\n";
            }
        } else {
            sum += pair.second;
        }
    }

    return 0;
}

 

Odnośnik do komentarza
Udostępnij na innych stronach

Problem wciąż nierozwiązany? Dodaj swoją odpowiedź

Jeśli chcesz dodać odpowiedź, zaloguj się lub zarejestruj nowe konto. Jedynie zarejestrowani użytkownicy mogą komentować zawartość tej strony.

Zarejestruj nowe konto

Załóż nowe konto. To bardzo proste!

Zarejestruj się

Zaloguj się

Posiadasz już konto? Zaloguj się poniżej.

Zaloguj się
 Udostępnij

×