Egy szám számjegyeinek szöveges kiírása C-ben?
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-.
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;
}
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
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!!
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.
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!
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...
Ú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.
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
Ha kifogással szeretne élni valamely tartalommal kapcsolatban, kérjük jelezze e-mailes elérhetőségünkön!