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
 11/17 anonim ***** válasza:

Jó, a vége f@szság volt.

Inkább beírok egy jó kódot c++-ban, a kiíratáson, beolvasáson kívül elvileg minden egyezik C-vel.


#include <iostream>


using namespace std;


int main()

{

int x;

cout<<"Kérem a számot: "; cin>>x;

while (x!=0)

{

int a=x;

int i=1;

while (a>=10)

{

a=a/10;

i=i*10;

}

switch (a)

{

case 1: cout<<"one "; break;

case 2: cout<<"two "; break;

case 3: cout<<"three "; break;

case 4: cout<<"four "; break;

case 5: cout<<"five "; break;

case 6: cout<<"six "; break;

case 7: cout<<"seven "; break;

case 8: cout<<"eight "; break;

case 9: cout<<"nine "; break;

case 0: cout<<"zero "; break;

}

x=x-i*a;

}


return 0;

}

2013. jan. 22. 00:19
Hasznos számodra ez a válasz?
 12/17 A kérdező kommentje:

Köszönöm szépen! Hálás vagyok a gyors segítségedért még ezekben a késői órákban is! Már értem az algoritmust, amit leírtál, de ma már nem lenne agyam lekódolni az egészet.

If (Elakadnék)

Írok;

Else

Akkor is;

:D

2013. jan. 22. 00:28
 13/17 A kérdező kommentje:

Gyakorlatilag csak az a módszer kellett, hogy hogyan kapjam meg első számnak a szám utolsó karakterét. (pl 952-nél a 9-et). Csak azt a 10-el való "leosztogatásosdit" kell kicserélnem az én "maradékos osztásommal".

De köszönöm szépen még egyszer, hogy ennyi időt szántál rám!!

2013. jan. 22. 00:32
 14/17 iostream ***** válasza:

Kicsit favágó az a megoldás, sokkal szebb, ha megfordítod a számot, és úgy írod ki maradékosan.


int reverse(int n)

{

int x = 0;

while (n > 0)

{

x *= 10;

x += n % 10;

n /= 10;

}

return x;

}


Tudom, hogy nem használhatsz függvényeket, de azért viszonylag könnyű kibányászni belőle. És akkor nem kell egymásba ágyazott ciklusok.

2013. jan. 22. 11:30
Hasznos számodra ez a válasz?
 15/17 A kérdező kommentje:

Működik! Köszönöm szépen!

Végül Best Answer C++ kódját írtam át C-be, és onnan szedtem ki a lényeges műveleteket, amik az enyémbe is kellettek. Így végül amellett, hogy megértettem a módszert, meg is tudtam írni. :)

Nagy megkönnyebbülés!

2013. jan. 22. 14:55
 16/17 anonim ***** válasza:
50%

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 ");


Na nehogy már...

Csinálj egy string tömböt (C-ben nem tudom, hogy ez egy char tömbökből álló tömb lesz-e, vagy miként kell definiálni). C#-pban valahogy így fog kinézni:


string[] nums = {"zero", "one", "two" /*...*/ };


Utána pedig, ha ki akarod írni:


printf(nums[right_digit]);


És a 10+ sorból álló kódod 2 sorban elfér...

2013. jan. 22. 14:55
Hasznos számodra ez a válasz?
 17/17 A kérdező kommentje:

Úgy látom nem olvastad végig a kommenteket. Szó volt róla, hogy egy könyv szerint haladok, amelyben a tömbök majd csak a következő fejezetben lesznek--> Tehát azok NÉLKÜL kellett megoldanom. Magyarán vagy a 'switch-case', vagy 'if-else if' volt a lehetséges opció. Megértem, hogy ezt sokkal egyszerűbben meg lehet oldani. Minden programnak tucatnyi megoldása létezik akár egy nyelven belül is. De ezt ti jól tudjátok.

Egy szó, mint száz; hálás vagyok a segítségedért, sőt, a tömbök után még meg is fogom érteni, hogy mit írtál, de addig sajnos nem sokat tudok kezdeni vele.

2013. jan. 22. 16:29
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!