Geek tričko zdarma Geek tričko zdarma
Tričko zdarma! Stačí před dobitím bodů použít kód TRIKO15. Více informací zde
Avatar
Martin Křivý:28. února 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. února 18:00
 
Odpovědět 28. února 17:59
Avatar
Martin Křivý:28. února 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. února 18:07
Tento výukový obsah pomáhají rozvíjet následující firmy, které dost možná hledají právě tebe!
Avatar
DarkCoder
Člen
Avatar
Odpovídá na Martin Křivý
DarkCoder:28. února 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í
+1 bodů
Řešení problému
Nahoru Odpovědět 28. února 20:08
"„Učíš-li se proto, aby sis zapamatoval, zapomeneš. Učíš-li se proto, abys porozuměl, zapamatuješ si."
Avatar
DarkCoder
Člen
Avatar
Odpovídá na Martin Křivý
DarkCoder:28. února 20:10

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

Nahoru Odpovědět 28. února 20:10
"„Učíš-li se proto, aby sis zapamatoval, zapomeneš. Učíš-li se proto, abys porozuměl, zapamatuješ si."
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.