IT rekvalifikace s garancí práce. Seniorní programátoři vydělávají až 160 000 Kč/měsíc a rekvalifikace je prvním krokem. Zjisti, jak na to!
Hledáme nové posily do ITnetwork týmu. Podívej se na volné pozice a přidej se do nejagilnější firmy na trhu - Více informací.

Diskuze: Zkrácení argumentů funkce na struct.

Aktivity
Avatar
Martin Křivý:28.2.2019 17:59

Usnadnit si psaní kodu namísto používání několik argumentů použít strukturu a pak s ní pracovat. V tomto případě se jedná čas tak abych mohl psát namísto delay(1000); třeba wait(1, 5, 2, 3); nebo wait(0, 5); Jednoduše se snažím si přizpůsobit kód do více uživatelského tvaru.
Nejde mi využít struktura tak abych nemusel psát vždy void wait(float s, float m, float h, float d), ale pouze void wait(struct)
Mimochodem jedná se o programování robota všechno si zkouším externě v C++ abych si to nasimuloval než to nahraju.

Zkusil jsem: #include "pch.h"
#include <iostream>

void wait(struct time waitTime);

struct time // všechno co bych vypisoval ve velkém tak by stačilo napsat datový typ time
{
float s;
float m;
float h;
float d;
};

int main()
{
wait(10, 10, 10, 10); // namísto delay(); použít wait s dobrovolnými parametry jako dny hodiny sekundy nebo i jiné proměnné
return 0;
}

void wait(struct time waitTime) // NAMÍSTO void wait(float s, float m, float h, float d)
{
// Nejde o to, že nejsou inicializované jde mi pouze o to, že nahrazují dlouhý tvar za kratší
float z = s + m + h + d;
std::cout << "I will wait: " << z << std::endl;
}

Chci docílit: Zkrátit si dlouhé argumenty na struct.

Editováno 28.2.2019 18:00
 
Odpovědět
28.2.2019 17:59
Avatar
Martin Křivý:28.2.2019 18:07

V jazyce C mi ani nejde vložit struct jako argument což v zde v C++ jde když ho předem inicializuji. Takže by se mi hodila rada jak to udělat i v C.

 
Nahoru Odpovědět
28.2.2019 18:07
Avatar
DarkCoder
Člen
Avatar
Odpovídá na Martin Křivý
DarkCoder:28.2.2019 20:08

Nehledej v tom nic složitého. Klasická práce se strukturou, žádné nástrahy.
Podívej na následující příklad:

Verze, kde každá proměnná je argumentem funkce.

#include <stdio.h>

int sum(int x1, int x2, int x3, int x4);

int main(void) {
        int a, b, c, d;

        printf("Zadej 4 cela cisla: ");
        scanf("%d %d %d %d", &a, &b, &c, &d);

        printf("Soucet je: %d", sum(a, b, c, d));
        return 0;
}

int sum(int x1, int x2, int x3, int x4) {
        return x1 + x2 + x3 + x4;
}

Verze, kde celá struktura je argumentem funkce.

#include <stdio.h>

struct stype {
        int a, b, c, d;
};

int sum(struct stype s);

int main(void) {
        struct stype str;

        printf("Zadej 4 cela cisla: ");
        scanf("%d %d %d %d", &str.a, &str.b, &str.c, &str.d);

        printf("Soucet je: %d", sum(str));
        return 0;
}

int sum(struct stype s) {
        return s.a + s.b + s.c + s.d;
}

Verze, kde argumentem funkce je ukazatel na strukturu.

#include <stdio.h>

struct stype {
        int a, b, c, d;
};

int sum(struct stype *ps);

int main(void) {
        struct stype str, *pstr = &str;

        printf("Zadej 4 cela cisla: ");
        scanf("%d %d %d %d", &(pstr->a), &(pstr->b), &(pstr->c), &(pstr->d));

        printf("Soucet je: %d", sum(pstr));
        return 0;
}

int sum(struct stype *ps) {
        return ps->a + ps->b + ps->c + ps->d;
}

Verze, kde struktura je definována jako nový typ a argumentem funkce je ukazatel na strukturu.

#include <stdio.h>

typedef struct {
        int a, b, c, d;
} STR;

int sum(STR *ps);

int main(void) {
        STR str, *pstr = &str;

        printf("Zadej 4 cela cisla: ");
        scanf("%d %d %d %d", &(pstr->a), &(pstr->b), &(pstr->c), &(pstr->d));

        printf("Soucet je: %d", sum(pstr));
        return 0;
}

int sum(STR *ps) {
        return ps->a + ps->b + ps->c + ps->d;
}

Upozornění:
Je třeba si uvědomit, že struktura je složený datový typ, kde jednotlivé prvky spolu nějak souvisí. Takže toto má smysl udělat jen tehdy, pokud by proměnné z první verze měly mezi sebou nějakou spojitost. Pokud není žádná spojitost mezi těmito proměnnými a chceš si jen zkrátit počet argumentů do jednoho, pak toto NEDÉLEJ! Ztratíš tím na čitelnosti kódu.

Akceptované řešení
+20 Zkušeností
+2,50 Kč
Řešení problému
Nahoru Odpovědět
28.2.2019 20:08
"I ta nejlepší poučka postrádá na významu, není-li patřičně předána." - DarkCoder
Avatar
DarkCoder
Člen
Avatar
Odpovídá na Martin Křivý
DarkCoder:28.2.2019 20:10

Struktura jako argument funkce, popřípadě ukazatel na strukturu jako argument funkce viz. příklady výše.

Nahoru Odpovědět
28.2.2019 20:10
"I ta nejlepší poučka postrádá na významu, není-li patřičně předána." - DarkCoder
Děláme co je v našich silách, aby byly zdejší diskuze co nejkvalitnější. Proto do nich také mohou přispívat pouze registrovaní členové. Pro zapojení do diskuze se přihlas. Pokud ještě nemáš účet, zaregistruj se, je to zdarma.

Zobrazeno 4 zpráv z 4.