Skocz do zawartości
  • 👋 Witaj na MPCForum!

    Przeglądasz forum jako gość, co oznacza, że wiele świetnych funkcji jest jeszcze przed Tobą! 😎

    • Pełny dostęp do działów i ukrytych treści
    • Możliwość pisania i odpowiadania w tematach
    • System prywatnych wiadomości
    • Zbieranie reputacji i rozwijanie swojego profilu
    • Członkostwo w jednej z największych społeczności graczy

    👉 Dołączenie zajmie Ci mniej niż minutę – a zyskasz znacznie więcej!

    Zarejestruj się teraz

Rekomendowane odpowiedzi

Opublikowano

czesc, potrzebuje pomocy z zadaniem do szkoly, a dokladniej, nie wiem jak sprawdzic, czy dany trojkat bedzie ostrokatny czy rozwartokatny, prosze o pomoc, i czy moglibyscie odrazu sprawdzic ten kod czy jest napisany poprawnie?

 

tutaj macie tresc zadania:

 

 

Zbadaj jaki trójkąt powstanie z trzech odcinków o podanej długości a,b,c


Wejście

W jednej lini trzy liczby 0 ≤ a,b,c ≤ 100000.


Wyjście

W jednej lini kolejno najpierw litera T gdy da się zbudować trójkąt
lub N jeśli trójkąt nie powstanie, stosownie do rozmiarów boków
istniejącego trójkąta, po spacji słowo rownoboczny, rownoramienny lub
roznoboczny, dalej po spacji prostokatny, rozwartokatny, ostrokatny.



Przykład

wejście

4 5 3


wyjście

T roznoboczny prostokatny




wejscie

2 2 2

wyjście

T rownoboczny ostrokatny



wejście

1 2 4

wyjście

N

 

 

 

 

a tutaj kod:

 

 

 

 

 

 

 

#include <iostream>
using namespace std;
int main()
{
signed int a,b,c;
cin>>a>>b>>c;
if ((a+<c || (a+c)<b || (c+<a)cout<<"N";
else
    if ((a*a+b*b==c*c || a*a+c*c==b*b || c*c+b*b==a*a) && a!=b && b!=c && a!=c)cout<<"T roznoboczny prostokatny";
    else
        if ((a*a+b*b==c*c || a*a+c*c==b*b || c*c+b*b==a*a) && (a==b || a==c || b==c))cout<<"T rownoramienny prostokatny";
        else
            if (a==b && b==c)cout<<"T rownoboczny ostrokatny";
            else
                if ((a+>c || (a+c> || (b+c)>a) && a!=b && b!=c && c!=a)cout<<"T roznoboczny [nie wiem jak sprawdzic czy ostrokatny czy rozwartokatny]";
                else
                    if ((a+>c || (a+c> || (b+c)>a) && a!=b && b!=c && c!=a)cout<<"T roznoboczny [nie wiem jak sprawdzic czy ostrokatny czy rozwartokatny]";
                    else
                        if ((a==b && a!=c) || (a==c && a!= || (c== && c!=a)cout<<"T rownoramienny [nie wiem jak sprawdzic czy ostrokatny czy rozwartokatny]";
                        else
                            if ((a==b && a!=c) || (a==c && a!= || (c== && c!=a)cout<<"T rownoramienny [nie wiem jak sprawdzic czy ostrokatny czy rozwartokatny]";
    
    return 0;
}


 

 

 

 

logi z ideone (nie ogarniam ich):

 

 

 

prog.cpp: In function ‘int main()’:
prog.cpp:15:52: error: ISO C++ forbids comparison between pointer and integer [-fpermissive]
prog.cpp:15:69: error: expected ‘;’ before ‘)’ token
prog.cpp:15:149: warning: statement has no effect [-Wunused-value]
prog.cpp:17:47: error: ISO C++ forbids comparison between pointer and integer [-fpermissive]
prog.cpp:17:64: error: expected ‘;’ before ‘)’ token
prog.cpp:17:144: warning: statement has no effect [-Wunused-value]
prog.cpp:19:60: warning: suggest parentheses around ‘&&’ within ‘||’ [-Wparentheses]
prog.cpp:21:61: warning: suggest parentheses around ‘&&’ within ‘||’ [-Wparentheses]
prog.cpp:15:49: error: label ‘a’ used but not defined
4ieVbpu.png
Opublikowano

c2 > a2 + b2 - Rozwartokątny

c2 = a2 + b2 - Prostokątny

c2 < a2 + b2 - Ostrokątny

 

Dwójki miały obrazować, że bok do kwadratu. Z tymi danymi powinieneś sobie poradzić ;)

 

// Edit - poprawiony Twój kod - brakowało nawiasów:

 
#include <iostream>
using namespace std;
int main()
{
signed int a,b,c;
cin>>a>>b>>c;
if ((a+<c || (a+c)<b || (c+<a)cout<<"N";
else
    if ((a*a+b*b==c*c || a*a+c*c==b*b || c*c+b*b==a*a) && a!=b && b!=c && a!=c)cout<<"T roznoboczny prostokatny";
    else
        if ((a*a+b*b==c*c || a*a+c*c==b*b || c*c+b*b==a*a) && (a==b || a==c || b==c))cout<<"T rownoramienny prostokatny";
        else
            if (a==b && b==c)cout<<"T rownoboczny ostrokatny";
            else
                if (((a+>c || (a+c> || (b+c)>a) && a!=b && b!=c && c!=a)cout<<"T roznoboczny [nie wiem jak sprawdzic czy ostrokatny czy rozwartokatny]";
                else
                    if (((a+>c || (a+c> || (b+c)>a) && a!=b && b!=c && c!=a)cout<<"T roznoboczny [nie wiem jak sprawdzic czy ostrokatny czy rozwartokatny]";
                    else
                        if ((a==b && a!=c) || (a==c && a!= || (c== && c!=a)cout<<"T rownoramienny [nie wiem jak sprawdzic czy ostrokatny czy rozwartokatny]";
                        else
                            if ((a==b && a!=c) || (a==c && a!= || (c== && c!=a)cout<<"T rownoramienny [nie wiem jak sprawdzic czy ostrokatny czy rozwartokatny]";
 
    return 0;
}
 
G8loSX2.png
Opublikowano

moglbys mi wytlumaczyc te logi:

 

 

prog.cpp: In function ‘int main()’:
prog.cpp:15:49: error: expected identifier before ‘(’ token
prog.cpp:15:49: error: expected ‘;’ before ‘(’ token
prog.cpp:17:47: error: ISO C++ forbids comparison between pointer and integer [-fpermissive]
prog.cpp:17:89: error: invalid type argument of unary ‘*’ (have ‘unsigned int’)
prog.cpp:17:110: error: expected ‘;’ before ‘)’ token
prog.cpp:19:107: warning: suggest parentheses around ‘&&’ within ‘||’ [-Wparentheses]
prog.cpp:21:108: warning: suggest parentheses around ‘&&’ within ‘||’ [-Wparentheses]
prog.cpp:17:44: error: label ‘a’ used but not defined

 

i powiedziec jak sie ymm robi cos takiego, ze np:

 

if ((a+b==c || a+c==  && (2*2=c || 3*3 ==c) && a*a=c*c)

dobrze to zapisalem, czy jakos to inaczej sie zagniezdza?

 

@@@edit

 

oddalem to zadanie, i zaakceptowalo mi 4 proby, 2 ostatnie sa takie bledy:

yokr60.jpg

4ieVbpu.png
Opublikowano

moglbys mi wytlumaczyc te logi:

 

 

prog.cpp: In function ‘int main()’:
prog.cpp:15:49: error: expected identifier before ‘(’ token
prog.cpp:15:49: error: expected ‘;’ before ‘(’ token
prog.cpp:17:47: error: ISO C++ forbids comparison between pointer and integer [-fpermissive]
prog.cpp:17:89: error: invalid type argument of unary ‘*’ (have ‘unsigned int’)
prog.cpp:17:110: error: expected ‘;’ before ‘)’ token
prog.cpp:19:107: warning: suggest parentheses around ‘&&’ within ‘||’ [-Wparentheses]
prog.cpp:21:108: warning: suggest parentheses around ‘&&’ within ‘||’ [-Wparentheses]
prog.cpp:17:44: error: label ‘a’ used but not defined

 

i powiedziec jak sie ymm robi cos takiego, ze np:

 

if ((a+b==c || a+c==  && (2*2=c || 3*3 ==c) && a*a=c*c)

dobrze to zapisalem, czy jakos to inaczej sie zagniezdza?

W sumie, to nie zrozumiałem o co ci chodzi, ale jeśli chodzi o sprawdzanie czy dany trójkąt jest ostrokątny, prostokątny, rozwartokątny + podział na boki, to tu masz kod na np. różnoboczny prostokątny:

 

if( a*a + b*b == c*c || a != b || a !=c || b != c) cout << "Trojkat jest prostokatny, przy czym różnoboczny";

Pamietaj, że porównanie to ==, a nie =.

G8loSX2.png
Opublikowano

Dodaj nawiasy pomiędzy każde z porównań.

 

// Edit Tak zostało to dobrze zapisane, brakuje jednego nawiasu przed (a+c== B), oraz tu: (2*2==4)tego na pomarańczowo ;) Chociaż nie wiem czemu to równanie ma służyć ;>

Mój błąd, w pełnej okazałości równanie zapisane jest dobrze ;)

G8loSX2.png
Opublikowano

ale chodzilo mi o to, ze czy dobrze zapisalem, powiedzmy napisze ci to slownie i kodem

 

jesli a+b==c lub a+c==b i 2*2==4 lub 3*3==9

 

 

if ((a+b==c || a+c== && (2*2==4 || 3*3==9))
4ieVbpu.png
Opublikowano

c2 > a2 + b2 - Rozwartokątny

c2 = a2 + b2 - Prostokątny

c2 < a2 + b2 - Ostrokątny

trzeba dodać, że c musi być najdłuższym bokiem

 

moje podejście na szybko. Nie chciało mi się testować dla wielu przykładów, ale ogólnie działa

 

#include <iostream>

using namespace std;

int main()
{
    unsigned int a, b, c;
    cin >> a >> b >> c;

    if(a > c) a ^= c ^= a ^= c; //sortowanie
    else if(a >  a ^= b ^= a ^= b;
    if(b > c) b ^= c ^= b ^= c;

    if(a + b < c) // sprawdzenie poprawnosci trojkata
    {
        cout << 'N';
        return 0;
    } else cout << "T ";

    a = a * a;
    b = b * b;
    c = c * c; //wyliczenie kwadratow

    if(c == a +  cout << "prostokatny "; //sprawdzenie rodzaaju trojkata
    else if(c > a +  cout << "rozwartokatny ";
    else cout << "ostrokatny ";
    if(a == b && b == c) cout << "rownoboczny";
    else if(a ==  cout << "rownoramienny";
    else cout << "roznoboczny";

    return 0;
}

i chyba trochę ładniejszy od poprzednich ;3

 

@edit pwrowadizłem ostatnią poprawke

Opublikowano

wyslalem kod Sopelka, i zaakceptowalo mi 1 na 6 prob, moj kod przeszedl 4/6 xD

 

wywala mi taki blad przy tych niezaakceptowanych:

 

 

trojkaty.cpp: In function 'int main()':
trojkaty.cpp:10:31: warning: operation on 'a' may be undefined
trojkaty.cpp:11:36: warning: operation on 'a' may be undefined
trojkaty.cpp:12:31: warning: operation on 'b' may be undefined

 

co najdziwniejsze, ideone wszystko akceptuje:

 

http://ideone.com/9a9jgH

4ieVbpu.png
Opublikowano

może chodzić o tego swapa, który POWINIEN działać.

 

zamien to na

 

 

if(a > c) int d = c; c = a; a = d; //sortowanie
    else if(a >  int d = b; b = a; a = d;
if(b > c) int d = c; c = b; b = d;

istnieje tez mozliwosc ze zakres zmiennych jest za maly (z tresci zadania wynika, ze moze to byc od 0 do 100000, czyli 100000^2 > intmax)

spróbuj zmienić typ zmiennych a,b,c na long long int (ew unsigned long long int)

 

ostatnim błędem może sama metoda sprawdzania, ale nie sądzę by różniła się sposobem rozróżniania z wyżej przedstawionymi

Opublikowano

wyslalem takie cos:

 

 

#include <iostream>

using namespace std;

int main()
{
    unsigned long long int a, b, c, d;
    cin >> a >> b >> c;

    if(a > c) int d = c; c = a; a = d;
        else if(a >  int d = b; b = a; a = d;
    if(b > c) int d = c; c = b; b = d;

    if(a + b < c)
    {
        cout << 'N';
        return 0;
    } else cout << "T ";

    a = a * a;
    b = b * b;
    c = c * c;

    if(c == a +  cout << "prostokatny ";
    else
    if(c > a +  cout << "rozwartokatny ";
    else cout << "ostrokatny ";
    if(a == b && b == c) cout << "rownoboczny";
    else
    if(a ==  cout << "rownoramienny";
    else cout << "roznoboczny";

    return 0;
}

 

 

dodalem tam int d, no bo wywalalo ze d niezadeklarowane ...

 

 

teraz wywala takie bledy:

 

trojkaty.cpp: In function 'int main()':

trojkaty.cpp:10:19: warning: unused variable 'd'

trojkaty.cpp:11:3: error: 'else' without a previous 'if'

trojkaty.cpp:11:22: warning: unused variable 'd'

trojkaty.cpp:12:16: warning: unused variable 'd'

 

 

jesli nie macie pomyslow, to napisze to na ifach jak wczesniej, i zawsze te 4/6 bedzie :D

4ieVbpu.png
Opublikowano

racja, klamr brakowało.

Poza tym, w ifie były 'przykrywane' zmienne d, co tez poprawilem.

 

 

#include <iostream>

using namespace std;

int main()
{
    unsigned long long int a, b, c, d;
    cin >> a >> b >> c;

    if(a > c) {d = c; c = a; a = d;}
        else if(a >  {d = b; b = a; a = d;}
    if(b > c) {d = c; c = b; b = d;}

    if(a + b < c)
    {
        cout << 'N';
        return 0;
    } else cout << "T ";

    a = a * a;
    b = b * b;
    c = c * c;

    if(c == a +  cout << "prostokatny ";
    else
    if(c > a +  cout << "rozwartokatny ";
    else cout << "ostrokatny ";
    if(a == b && b == c) cout << "rownoboczny";
    else
    if(a ==  cout << "rownoramienny";
    else cout << "roznoboczny";

    return 0;
}

jeśli ten kod dalej będzie dawał niepoprawne odpowiedzi to trzeba będzie szukać błędów w metodzie do sprawdzania rodzaju trójkąta

Opublikowano

ziom, juz wiem czemu wywalalo zla odp ...

 

W jednej lini kolejno najpierw litera T gdy da się zbudować trójkąt
lub N jeśli trójkąt nie powstanie, stosownie do rozmiarów boków
istniejącego trójkąta, po spacji słowo rownoboczny, rownoramienny lub
roznoboczny, dalej po spacji prostokatny, rozwartokatny, ostrokatny.




Przykład


wejście


4 5 3



wyjście


T roznoboczny prostokatny

 

a Twoj wypisuje

 

T prostokatny roznoboczny xD

 

dzieki za cala pomoc, temat do zamkniecia :D

4ieVbpu.png

Zarchiwizowany

Ten temat przebywa obecnie w archiwum. Dodawanie nowych odpowiedzi zostało zablokowane.

×
×
  • Dodaj nową pozycję...