Kezdőoldal » Számítástechnika » Programozás » Szóval akkor hogy lenne...

Szóval akkor hogy lenne érdemes "átláthatóbbá" tenni egy programot?

Figyelt kérdés

Kiírtam egy kérdést nemrég,de még mindig nem tudom,mit kéne csinálnom


Az első része a programnak az,hogy bekérek egy számot,aztán ez alapján különféle változóknak adok bizonyos értékeket+ még szintén a szám alapján kiíratok bizonyos dolgokat,itt a kép

[link]


ha csak simán beírom a mainbe(ami a voidban van),akkor nyílván nincs semmi gond(mert előtte deklarálva vannak a változók),de azt nem tudom megcsinálni,hogy ez ott van a main előtt,és bele meg csak annyit írok,hogy faj();


szóval akkor azt nem lehet megoldani,hogy a mainben csak 1 sort használva ezt "odajuttassam"(ami a voidban van kb 20 sor)?

[link]

valahogy így,csak nem igazán értem a függvények működését


2016. okt. 15. 20:47
1 2
 11/16 tabaki ***** válasza:
100%

"Kötekedés az még mindig jól megy"


Brávó. Kötekedés, hogy a működőképesség minimumát várjuk egy publikált programtól. Amelyik szerinted már csupán holmi átláthatóvá tevést igényel...

Hányszor sikerült lefordítanod? Hányszor futtattad másképp megoldva? A C-fordítóprogramnak leszel szíves beszólogatni, az tehet az egészről.

2016. okt. 16. 16:59
Hasznos számodra ez a válasz?
 12/16 tabaki ***** válasza:

[link]

Csak azt a sok rohadt kötekedést ne kellett volna elviselni magamtól! Minek kell a kákán is csomót keresnem? Micsoda undorító egy természetem van...

2016. okt. 16. 21:55
Hasznos számodra ez a válasz?
 13/16 anonim ***** válasza:

Jajj "tabaki", talán ennyire nem kellett volna elvenned a kedvét az egész programozástól! :-)


Amikor kiskoromban gép elé ültem én is hasonló kódokat csináltam, najó azok éppen működtek is, de iszonyat sok redundancia volt bennük... ...aztán ezt kinőttem.


Még ma is néha nosztalgiából belenézek az ősrégi kódjaimba, és néha megrémít milyen emberfeletti munkát öltem bele egy-egy témába... :-)


A kérdező szerintem érdeklődik egy bizonyos játék iránt és ez arra ösztökélte, hogy megpróbáljon önszántából csinálni "valami hasonlót", ez dicséretes... ...az ihlet megvolt, csak a kivitelezés várat magára, így megkérdezte, hogyan tovább... Ti meg egy WarCraft-ot vártok tőle... :-)

2016. okt. 17. 10:02
Hasznos számodra ez a válasz?
 14/16 tabaki ***** válasza:

@#13:

Hogy Kérdező is tisztában legyen a ténnyel: Nem vagyok programozó. Sőt: Hétvégi programozónak is elég gyenge vagyok. Mi több: Pascalban programozok, és nekem a C majdhogynem kínaiul van. Bőven van rá okom tehát, hogy ne tanúsítsak a lelki habitusommal amúgy is ellentétes könyörtelenséget. Igen, tökéletesen megértem, és most a C-t előszedve át is élem a szárnypróbálgatás nehézségeit.


Azonban...

„másfél hónap programozás után ti biztos mindent tudtatok”


Annyit egy negyedóra alatt is megtanultam, hogy egy változóra szükség van ahhoz, hogy értéket kaphasson. Nem a Warcraftot várnám el, hanem azt, hogy Kérdező ne írjon meg egy fél játékot, amíg egyetlen működőképes beolvasást-kiírást nem tud felmutatni.

Az talán fölösleges komiszkodás volt a részemről, hogy a puszta futtatási eredménnyel hergeltem. Tisztességesebb, ha közlöm a kísérleteimet -- legalább a profiknak is szerzek egy kis mulatságot:


Ez nagyjából az, amit Kérdező próbált megoldani:

#include <stdio.h>

#include <string.h>


int faj1;

float E, T, V;

char faj2[6];


void fajKiiras(){

      printf("A jatekos karaktere egy %s harcos, akinek\n\t"

      "eletereje %.1f,\n\tvedelme %.1f,\n\ttamadasa %.1f.\n", faj2, E, V, T);     

}


void faj(){

      printf("Add meg a karakter fajat: ");

      scanf("%d", &faj1);

      while((faj1 < 1) || (faj1 > 4)){

            printf("Adj meg egy ervenyes szamot!\n");

            scanf("%d", &faj1);

      }

      printf("\n");

      switch(faj1){

            case 1:

                  E = 10.0;

                  T = 10.0;

                  V = 4.0;

                  strcpy(faj2,"ember\0");

                  break;

            case 2:

                  E = 6.0;

                  T = 12.0;

                  V = 6.0;

                  strcpy(faj2,"tunde\0");

                  break;

            case 3:

                  E = 6.0;

                  T = 8.0;

                  V = 10.0;

                  strcpy(faj2,"torp\0");

                  break;

            case 4:

                  E = 8.0;

                  T = 14.0;

                  V = 2.0;

                  strcpy(faj2,"ork\0");

                  break;

      }

      fajKiiras();

}

           

int main(){

      faj();

      return 0;

}


Ez meg ahogyan egyelőre nekem sikerült átbarkácsolni:

#include <stdio.h>

#include <string.h>


int faj1;


struct fajAdat{

      char melyik[6];

      float e, v, t;

      };


struct fajAdat fajok[4] = {

      {"ember\0", 10.0, 4.0, 10.0},

      {"tunde\0", 6.0, 6.0, 12.0},

      {"torp\0", 6.0, 10.0, 8.0},

      {"ork\0", 8.0, 2.0, 14.0}

      };


void fajKiiras(int i){

      printf("A jatekos karaktere egy %s harcos, akinek\n\t"

      "eletereje %.1f,\n\t"

      "vedelme %.1f,\n\t"

      "tamadasa %.1f.\n",

      fajok[i].melyik, fajok[i].e, fajok[i].v, fajok[i].t);     

}


void faj(){

      printf("1 = ember\n2 = tunde\n3 = torp\n4 = ork\n\n");

      printf("Add meg a karakter fajat: ");

      scanf("%d", &faj1);

      while((faj1 < 1) || (faj1 > 4)){

            printf("Ervenyes szamot adj meg! ");

            scanf("%d", &faj1);

      }

      faj1--;

      printf("\n");

      fajKiiras(faj1);

}

           

int main(){

      faj();

      return 0;

}

2016. okt. 17. 14:10
Hasznos számodra ez a válasz?
 15/16 anonim ***** válasza:

Valahogy így nézzen ki a struktúra:


* * * * * * * * * * * * * * * * * * * *

struct FajDefinicio {

const char* nev;

const float eletero;

const float vedelem;

const float tamadas;

};


typedef enum {

EMBER,

TUNDE,

TORP,

ORK

} Faj;


struct FajDefinicio fajok[] = {

{"ember", 10.f, 10.f, 4.f},

{"tunde", 6.f, 12.f, 6.f},

{"torp", 6.f, 8.f, 10.f},

{"ork", 8.f, 14.f, 2.f}

};

* * * * * * * * * * * * * * * * * * * *


Majd van egy main():


* * * * * * * * * * * * * * * * * * * *

Faj kivalasztottFaj = beolvas();

kiir(kivalasztottFaj);

//stb

* * * * * * * * * * * * * * * * * * * *


Beolvasás elég egyszerű mindenféle körítés nélkül:


* * * * * * * * * * * * * * * * * * * *

printf("Válassz ki egy fajt (1-4)\n");

while (1) {

unsigned bemenet;

scanf("%d", &bemenet);

if (bemenet >= 1 && bemenet <= 4)

return (Faj) (bemenet - 1);

printf"Nem sikerült, próbáld újra");

}

* * * * * * * * * * * * * * * * * * * *


Kiírás:


* * * * * * * * * * * * * * * * * * * *

printf("nev: %s, eletero: %f, vedelem: %f, tamadas: %f\n",

fajok[faj].nev, fajok[faj].eletero, fajok[faj].vedelem, fajok[faj].tamadas);

* * * * * * * * * * * * * * * * * * * *


Eddig még nem volt szükség if-ekre meg switchre de ha kellene:


* * * * * * * * * * * * * * * * * * * *

switch(kivalasztotFaj) {

case EMBER:

// blah blah

break;

case TUNDE:

(...)

}

* * * * * * * * * * * * * * * * * * * *


Próbáljuk kerülni az if-létrákat és a switcheket. Általában rosszul strukturált kódra vall. Ami ennél is fontosabb: kerüljük a kódismétlést, ha van közös kód, emeljük ki.

2016. okt. 17. 22:01
Hasznos számodra ez a válasz?
 16/16 tabaki ***** válasza:
@#15: Köszönöm, megcsináltam így is, hasznos volt.
2016. okt. 18. 01:36
Hasznos számodra ez a válasz?
1 2

Kapcsolódó kérdések:




Minden jog fenntartva © 2024, www.gyakorikerdesek.hu
GYIK | Szabályzat | Jogi nyilatkozat | Adatvédelem | Cookie beállítások | WebMinute Kft. | Facebook | Kapcsolat: info(kukac)gyakorikerdesek.hu

A weboldalon megjelenő anyagok nem minősülnek szerkesztői tartalomnak, előzetes ellenőrzésen nem esnek át, az üzemeltető véleményét nem tükrözik.
Ha kifogással szeretne élni valamely tartalommal kapcsolatban, kérjük jelezze e-mailes elérhetőségünkön!