Kezdőoldal » Számítástechnika » Programozás » Egy szám számjegyeinek szövege...

Egy szám számjegyeinek szöveges kiírása C-ben?

Figyelt kérdés

Az a feladat, hogy írnom kell egy olyan programot (C), ami a begépelt egész szám egyes számjegyeit egymás után szóközzel elválasztva kiírja.

Addig eljutottam, hogy kiírta a számjegyeket szövegesen, DE fordítva, mert a számot csak maradékos osztással tudtam jobbról balra szétszedni. Ezért írja ki fordítva.

A kérdésem az lenne, hogy hogyan lehetne megoldani a programot csakis a következők felhasználásával:

-for, while, do

-if, else if, else, switch

(-break, continue)

Ennyi a megengedett. Továbbá itt a program, amit eddig sikerült összehozni:

----------------------------------------------------------

#include <stdio.h>


int main (void)

{

int number, right_digit;


printf ("Adja meg a szovegesen kiirando szamot: \n");

scanf ("%i", &number);


while (number != 0)

{

right_digit = number % 10;


if (right_digit == 0)

printf ("zero ");

else if (right_digit == 1)

printf ("one ");

else if (right_digit == 2)

printf ("two ");

else if (right_digit == 3)

printf ("three ");

else if (right_digit == 4)

printf ("four ");

else if (right_digit == 5)

printf ("five ");

else if (right_digit == 6)

printf ("six ");

else if (right_digit == 7)

printf ("seven ");

else if (right_digit == 8)

printf ("eight ");

else

printf ("nine ");


number = number / 10;

}

return 0;

}

--------------------------------------------------------

Biztos lehetett egyszerűbben is megoldani, de ha lehet, ne radikális módon túrjuk szét a már meglévő programot. Viszont, ha másképp nem megy, mert totál máshogy kezdtem bele, akkor teljesen más ötlet is jöhet -a megengedett ciklusok és döntési szerkezetet felhasználásával-.



2013. jan. 21. 22:10
1 2
 1/17 anonim ***** válasza:
100%

"ha lehet, ne radikális módon túrjuk szét a már meglévő programot"

Ötlet: kiíratás előtt megfordítod number változó számjegyeit, (kell hozzá átmeneti változó/változók), ez megy hiszen "szét tudtad szedni" fordítva. Így visszavezettük a problémát egy olyanra amit már meg bírsz oldani (megoldottad).

2013. jan. 21. 22:23
Hasznos számodra ez a válasz?
 2/17 anonim ***** válasza:
Fűzd hozzá a számokat mindig egy string(char array) elejéhez, aztán a végén írd ki. Bár elég favágó megoldás:)
2013. jan. 21. 22:27
Hasznos számodra ez a válasz?
 3/17 A kérdező kommentje:

Erre én is gondoltam, csak ennek a logikájában ott akadtam el, hogy a megfordítás során nem egy számot kapok, hanem egy-egy számjegyet egymás után, mert ugye a while (vagy for) így írja ki a maradékos osztás módszer használatával. Tehát arra akarok most kilyukadni, hogy később a while-ben hogy hivatkozok a még előtte megfordított számra, miközben az csak számjegyekből álló sor?

Kb. egy hete kezdtem el ezt a programozós dolgot, tehát elég kezdő vagyok, ami valószínűleg látszik is. :)

Szóval: Addig jutottam el, hogy a number-nek, és a right_digit-nek is plusz egy változót adtam hozzá, azaz lett egy number, és number1, valamint right_digit, és right_digit1.

Az 1-el végződő változók kerültek az előzőek helyére, a sima number, és right_digit pedig egy új while ciklusban szerepel a 2. while előtt, azaz annak lenne az a szerepe, hogy előtte egyszer megfordítja a számot, amit majd a második while-ben használnánk.

-----include <stdio.h>


int main (void)

{

int number, number1, right_digit, right_digit1;


printf ("Adja meg a szovegesen kiirando szamot: \n");

scanf ("%i", &number);


while (number != 0)

{

right_digit1 = number % 10;

printf ("%i", right_digit);

number = number / 10;

}

while (number1 != 0)

{

right_digit1 = number1 % 10;


if (right_digit1 == 0)

printf ("zero ");

else if (right_digit1 == 1)

printf ("one ");

else if (right_digit1 == 2)

printf ("two ");

else if (right_digit1 == 3)

printf ("three ");

else if (right_digit1 == 4)

printf ("four ");

else if (right_digit1 == 5)

printf ("five ");

else if (right_digit1 == 6)

printf ("six ");

else if (right_digit1 == 7)

printf ("seven ");

else if (right_digit1 == 8)

printf ("eight ");

else

printf ("nine ");


number1 = number1 / 10;

}

return 0;

}

-----

Így néz ki jelenleg. A gond még mindig az, hogy hogyan vezetem át az első while eredményét a másodikba. Tehát hogy írjam bele a 'number1'-et az első while-ba, hogy a 2. while dolgozni tudjon vele?

Uh! Bocsánat a hosszú szövegelésért, csak már nagyon régóta agyalok ezen, és nem akar leesni.

2013. jan. 21. 22:43
 4/17 A kérdező kommentje:

az első while-ben az sima right_digit akart lenni.


2. hozzászóló:

Bár "favágó" módszer lehet a te megoldásod, ennek ellenére nem nagyon értem, hogy mire gondolsz. Ezzel még nem nagyon találkoztam, ezért elviekben enélkül is meg kéne tudnom oldani. :)

2013. jan. 21. 22:51
 5/17 anonim ***** válasza:
csináld rekurzívan, így nem kell ideiglenes változó sem
2013. jan. 21. 23:16
Hasznos számodra ez a válasz?
 6/17 anonim ***** válasza:

Én nem is értem ezt az erőlködést, de tényleg.

Ahogy fentebb írták, berakod a char tömbbe és for ciklussal kiíratod szóközökkel elválasztva.

Mi a fenének ide maradékos osztás meg egyéb hülyeségek...

2013. jan. 21. 23:23
Hasznos számodra ez a válasz?
 7/17 A kérdező kommentje:

1. Egy hete tanulom önszorgalomból a C programozást.

2. Kikötöttem az egyik kommentemben, hogy miket lehet használni a megoldáshoz. Nem véletlen! Tankkönyv szerint haladok, és jelenleg ez egy gyakorló feladat lenne, amit nem akarok átugrani! A tömbök a következő fejezet lenne, szóval fogalmam sincs, hogy mit, és milyen "char tömbbe" rakjak.

Elhiszem, hogy segíteni akarsz, de nem egy éve tanulom, és még az előéletemnek sem volt sok köze az informatikához. Egyszerűen érdekel a dolog, és gondoltam elnéző embereket találok itt.

Az alap fogalmakkal vagyok még csak tisztában. Kérlek titeket, hogy legyetek ezzel tisztában, és eszerint segítsetek. Tehát, ha van valami ötletetek, akkor a legjobb segítség az lenne, ha alapból a forráskódot küldenétek, amit még talán meg is tudok érteni, de a számomra alapból ismeretlen fogalmakkal (pl rekurzív), sejtésem sincs, hogy mit kéne kezdeni. Később biztos lesz, de egyelőre még nem.

Tovább léphetnék a könyvben, és később biztos lenne rá egyszerűbb megoldás, amivel pikk-pakk össze tudnám dobni, mint ahogy az utolsó válaszoló is említette, de tisztességesen szeretném átvenni a tananyagot.

2013. jan. 21. 23:40
 8/17 anonim ***** válasza:

Másold be légyszíves a pontos feladatot, mert igazából a feladat amit leírtál, köszönő viszonyban sincs azzal, amit kódoltál.

Ha a számjegyeket kell kiírni szóközzel elválasztva nem értem mit keresnek itt "eight" meg hasonló marhaságok.

2013. jan. 21. 23:45
Hasznos számodra ez a válasz?
 9/17 A kérdező kommentje:

"Írjunk programot, amely egy beírt egész szám számjegyeit kiírja szövegesen (angolul). Azaz, ha például beírjuk a programnak, hogy 952, akkor kimenetként az jelenik meg, hogy:

nine five two"


A leírás legelső mondatában ugyan nem, de a másodikban ott van, hogy szövegesen. Bár elég egyértelmű(még nekem is), hogy szövegesen próbálom azokat a szerencsétlen számokat kiíratni a programmal. Azért vannak ott angolul az egyek esetek (számok) szöveges megfelelői. De itt nem is ez volt a kérdés. Az a rész szerintem mindenféleképpen kell. Az kéne nekem, hogy hogyan tudom úgy megírni a programot (Az eddig tanultak segítségével!!-fentebb leírtam-), hogy ne fordítva írja ki a kimenetet. Mert a leírásban lévő kód addig jó, hogy kiírja, de fordítva.

2013. jan. 21. 23:56
 10/17 anonim ***** válasza:

Na, végre valami kerek.

Elsőkörben a rengeteg if ág helyett egyetlen switch - case egység, int kapcsolóval.

Ami először eszembe jut.

Elmented egy segédváltozóba a számodat, és addig osztogatod 10-el, amíg kisebb nem lesz, mint 10.

Ekkor ez lesz a kapcsoló és ez alapján íratsz ki egy szöveget.

Utána az eredeti számot leosztod 10-el és újra az egész, elmented ezt a segédváltozóba és osztogatod 10-el.

Az egész külső ciklus addig megy, amíg a számod el nem fogy.

2013. jan. 22. 00:05
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!