Nagłówki funkcji

0

Witam, nie wiedziałem w jakim temacie to umieścić ponieważ w tym zadaniu występują 4 języki, jeśli jest błędny proszę o przeniesienie.

Co do zadania to mam wypisać nagłówki funkcji (w c, c+, c#, pascal), która przyjmuję jako dane łańcuch znaków oraz zwraca liczbę całkowitą i tablicę dowolnych liczb. Mam zrobione to tak:

C
void przyjmujelancuch(char lancuchznakow[])
int zwracaliczbe()
float *zwracatablice()

C++
void przyjmujelancuch(string lancuchznakow) - uwaga taka sama jak wcześniej
int zwracaliczbe()
float *zwracatablice()

C#
public void przyjmujelancuch(string lancuchznakow)
public int zwracaliczbe()
public float[] zwracatablice()

Pascal
procedure przyjmujelancuch(lancuchznakow : String)
function zwracaliczbe() : integer
function zwracatablice() : array[x..y] of double 

Tylko sam do końca nie wiem czy mają to być trzy funkcje do każdego języka czy tylko jedna. Problem w tym, że jedną nie zawsze się da, skoro ma zwracać kilka rzeczy, chyba że przekazujemy coś przez wskaźnik? Może Wy macie jakiś pomysł zaawansowanego programisty na te zadanie? Będę wdzięczny za sprawdzenie tego co mam i ewentualne korekty.

0

Jeżeli koniecznie chcesz zwrócić kilka rzeczy z jednej funkcji w C możesz użyć struktury a w C++ std::tuple lub też struktury (klasy). Pascal też ma zdaje się jakieś struktury a C# nie znam, ale pewnie ma coś jak std::tuple no i na pewno ma klasy.

0
Endrju napisał(a)

Jeżeli koniecznie chcesz zwrócić kilka rzeczy z jednej funkcji w C możesz użyć struktury a w C++ std::tuple lub też struktury (klasy). Pascal też ma zdaje się jakieś struktury a C# nie znam, ale pewnie ma coś jak std::tuple no i na pewno ma klasy.

Właśnie chodzi o to aby nie komplikować tego i było zapisane jak najprościej to możliwe.

0

Ale co tu jest skomplikowanego? Zdecyduj się, czy chcesz zwrócić zbiór kilku rzeczy czy wysyłać argumenty przez referencję (wskaźnik) i traktować je jako wyjście z funkcji. Z Twojego zadania wynika, że ma to być jedna funkcja.

1

Jednoczesne zwracanie liczby i tablicy liczb w C, C++, C# czy Pascalu jest niemożliwe (w prawie wszystkich innych językach zresztą też).

Tak jak zauważyłeś, możesz to zrobić wskaźnikiem wypełnianym w funkcji, ale to ciężko nazwać zwracaniem...

float func(char *txt, int *result);

Można to też ostatecznie zapakować w strukturę:

struct struc
{
    int intResult;
    float *floatArrResult;
}

struc func(char *txt)

Przy czym nie wiem czy zwracanie struktury to to samo co zwracanie liczby i tablicy...

Ale IMO twoje rozwiązanie jest zgodne z tym czego wymagają.

1

W C:

typedef struct {
  int num;
  int *tab;
} my_struct;

my_struct f(char str[]);

W C++

std::pair<int, int*> f(std::string str);
0
MSM napisał(a)

Jednoczesne zwracanie liczby i tablicy liczb w C, C++, C# czy Pascalu jest niemożliwe (w prawie wszystkich innych językach zresztą też).

Tak jak zauważyłeś, możesz to zrobić wskaźnikiem wypełnianym w funkcji, ale to ciężko nazwać zwracaniem...

float func(char *txt, int *result);

Można to też ostatecznie zapakować w strukturę:

struct struc
{
    int intResult;
    float *floatArrResult;
}

struc func(char *txt)

Przy czym nie wiem czy zwracanie struktury to to samo co zwracanie liczby i tablicy...

Ale IMO twoje rozwiązanie jest zgodne z tym czego wymagają.

Dzięki, a czy c# oraz pascal jest poprawnie zapisany? Bo w tych językach mam największe problemy i nie jestem ich pewien.

1

Kod w C# jest poprawny składniowo na pewno.
W Pascalu nie pisałem od wieków ale chyba też jest poprawny.

1

w każdej deklaracji z każdego języka brakuje średnika na końcu każdej linii. w pascalu prawdopodobnie najpierw będziesz musiał zadeklarować nowy typ:
type tablica = array[x..y] of double;
i go zwracac

0

Ok dzięki za pomoc. Jakby ktoś jeszcze miał jakieś uwagi to chętnie poczytam i będę zaglądał do tego tematu.

1

Tak z grubsza, bo nie mam czasu na odpalanie każdego kompilatora:

C

// lancuchy w C to (char *)
void przyjmujelancuch(char *lancuchznakow, int &outLiczba, float *buforFloat, usigned int buforSize, unsigned int &buforLen);

C++

// w C++ obiekty tylko do odczytu przesyłamy jako (const string &)
typedef std::vector<float> FloatVector;
void przyjmujelancuch(const string &lancuchznakow, int &outLiczba, FloatVector &wynik);

Pascal

type tablica = array[x..y] of double;
procedure przyjmujelancuch(const lancuchznakow : String, var liczba: integer, var buforFloat: tablica, var buforLen: integer);

Co do Pascala to zajrzyj tutaj: http://delphi.about.com/od/delphitips2007/qt/array_parameter.htm

P.S. Zwracanie struktur w C++ przez return nie należy do najszczęśliwszych, głównie z uwagi na

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