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

Struktury


Rekomendowane odpowiedzi

Opublikowano

Napisz funkcję, której jako argument przekazujesz tablicę okręgów. Funkcja zwraca obwód największego okręgu.

#include <iostream>
#include<cmath>
using namespace std;

struct promien
{
    double r;
};

double fnobwod(promien tab[4])
{
    double j = 0;
    for(int i = 0; i < 4 ; i++ )
    {
    j = 2*M_PI*tab[i].r;
    tab[j] = tab[i];
    }
    return tab[j];
}
int main()
{
    promien tab[4];
    tab[0].r = 3;
    tab[1].r = 4;
    tab[2].r = 5;
    tab[3].r = 1;
    cout<<fnobwod(tab[4])<<endl;

}

Takie o to zadanie mam. Nie mam pomysłu jak zrobić kod. Oczywistym problemem jest jak połączyć struktury. Może ktoś potrafi to zrobić? Kod dość na szybko pisany więc może się wkraść jakiś głupi błąd.


 

pl ;)

Opublikowano

po pierwsze, zrób strukturę okrąg w której zawrzesz wszystkie informacje na jego temat

Po drugie, zrób funkcje obliczające odpowiednie pola na podstawie innych

 

zaraz ci coś na szybko naklepię dla przykładu

 

//prosz:

#include <iostream>
#include <cmath>

struct okrag
{
public:
    double promien;
    double obwod;
    double pole;
};

void oblicz_obwod(okrag *okr)
{
    okr->obwod = 2*M_PI*okr->promien;
}

void oblicz_pole(okrag *okr)
{
    okr->pole = M_PI*pow(okr->promien, 2);
}

int main()
{
    okrag okregi[3];
    okregi[0].promien = 3;
    okregi[1].promien = 5;
    okregi[2].promien = 12;

    for (int i = 0; i < 3; i++)
    {
        oblicz_obwod(&okregi[i]);
        oblicz_pole(&okregi[i]);
        std::cout << okregi[i].pole << ", "  << okregi[i].obwod << std::endl;
    }
    std::cin.get();
    return 0;
}
tą funkcję którą potrzebujesz napisz sobie sam, na podstawie tego co tu napisałem

jak czegoś nie rozumiesz to pisz :v

846331404756772371599.jpeg
Opublikowano

To nawet zrozumiałem. Teraz będę próbował to posortować w jakiś sposób :D. Jak narazie nie mogę poprawnie ustawić funkcji sort. Teraz próbuje napisać pętle.

pl ;)

Opublikowano

Choć próbowałem na wszystkie sposoby jakie mi przyszły do głowy to i tak nie wychodzi :D. Może to wina tej analizy matematycznej :D.

Zrobiłem to w taki sposób. Niestety nie potrafię poprawnie ustawić funkcji sort ani zrobić dobrej pętli.

#include <iostream>
#include<cmath>


using namespace std;

struct okrag
{
    double r;
    double obwod;
};
void fnobwod(okrag *okr)
{
    okr->obwod = 2*M_PI*okr->r;
}
int main()
{
    okrag tab[4];
    tab[0].r = 3;
    tab[1].r = 4;
    tab[2].r = 5;
    tab[3].r = 1;

        for( int i = 0 ; i < 4; i++)
    {
        fnobwod(&tab[i]);
        cout<<tab[i].obwod<<endl;
    }

        return 0;
}

pl ;)

Opublikowano

srsly? Nie rozumiem po co ci jest tam sort, jak potrzebujesz tylko wypluć największy obwód. Jak masz problem z ustawieniem std::sort, to zaimplementuj swój, np. bubble sort i z głowy.

 

#include <iostream>
#include <cmath>

struct okrag
{
public:
    double promien;
    double obwod;
    double pole;
};

void oblicz_obwod(okrag *okr)
{
    okr->obwod = 2*M_PI*okr->promien;
}

void oblicz_pole(okrag *okr)
{
    okr->pole = M_PI*pow(okr->promien, 2);
}

double sortuj(okrag *okregi, int ilosc)
{
    double obwmax = 0;
    for (int i = 0; i < ilosc; i++) if (okregi[i].obwod > obwmax) obwmax = okregi[i].obwod;
    return obwmax;
}

int main()
{
    okrag okregi[3];
    okregi[0].promien = 3;
    okregi[1].promien = 5;
    okregi[2].promien = 12;

    for (int i = 0; i < 3; i++)
    {
        oblicz_obwod(&okregi[i]);
        oblicz_pole(&okregi[i]);
        std::cout << "#" << i << " - pole: " << okregi[i].pole << ", obwod:"  << okregi[i].obwod << std::endl;
    }
    std::cout << "Najwiekszy obwod: " << sortuj(okregi, 3);
    std::cin.get();
    return 0;
}
­
846331404756772371599.jpeg
Opublikowano

1. Nie trzymaj nic więcej niż promień jako pola klasy, bo są od siebie zależne.

2. W tym zadaniu nie ma nic mowy o polu.

3. Co wy chcecie sortować?

4.

j = 2*M_PI*tab[i].r;
    tab[j] = tab[i];

Ten kod nie ma sensu

5. Obwód wystarczy policzyć po znalezieniu największego promienia.

6. Źle wywołujesz funkcję.

7. Phoenix

7.1 Dlaczego przyjmujesz wskaźniki (i nie zabezpieczasz się przed nullptr)

7.2 Twoje obiekty mają niezdefiniowane wartości podczas ich tworzenia

7.3 Twoja funkcja sortuj nie sortuje

7.3.1 nawet jeśliby sortowała to po cholere

7.4 Paskudna mieszanka C z C++

 

Nie wiem czemu się tak męczysz phoenix skoro wystarczyło poprawić kilka linii.

#include <iostream>
#include<cmath>
using namespace std;

struct promien
{
    double r;
};

double fnobwod(promien tab[4])
{
    double j = 0;
    for(int i = 1; i < 4 ; i++ )
    {
        if(tab[i] > tab[j]) j = i;
    }
    return 2*M_PI*tab[j];
}
int main()
{
    promien tab[4];
    tab[0].r = 3;
    tab[1].r = 4;
    tab[2].r = 5;
    tab[3].r = 1;
    cout<<fnobwod(tab)<<endl; //zle wywolywales funkcje

}
Opublikowano

||=== Build: Debug in rgfdgr (compiler: GNU GCC Compiler) ===|
C:\Users\lorak\Desktop\rgfdgr\main.cpp||In function 'double fnobwod(promien*)':|
C:\Users\lorak\Desktop\rgfdgr\main.cpp|15|error: invalid types 'promien*[double]' for array subscript|
C:\Users\lorak\Desktop\rgfdgr\main.cpp|17|error: invalid types 'promien*[double]' for array subscript|
C:\Users\lorak\Desktop\rgfdgr\main.cpp|18|warning: control reaches end of non-void function [-Wreturn-type]|
||=== Build failed: 2 error(s), 1 warning(s) (0 minute(s), 0 second(s)) ===|

 

Takie błędy mi wywaliło w Codeblocks.

Natomiast w Visual Enterprise 2015 znacznie więcej.

 

pl ;)

Opublikowano

@pypciaR

#include <iostream>
#include<cmath>
using namespace std;

struct promien
{
    double r;
};

double fnobwod(promien tab[4])
{
    int j = 0;
    for(int i = 1; i < 4 ; i++ )
    {
        if(tab[i].r > tab[j].r) j = i;
    }
    return 2*M_PI*tab[j].r;
}
int main()
{
    promien tab[4];
    tab[0].r = 3;
    tab[1].r = 4;
    tab[2].r = 5;
    tab[3].r = 1;
    cout<<fnobwod(tab)<<endl;

}

Bot do gry NosTale:


[bOT] NosBota 1.3v

Zarchiwizowany

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

×
×
  • Dodaj nową pozycję...