Witam czy może ktoś mi napisać jak zadeklarować tablice dla wielu słów np dla (jeden, dwa, ..., dziesiec)? Wiem że dla jednego słowa można zadeklarować tablicę w ten sposób char slowo[10], czyli deklaruje tablice dla slowa o dlugosci 10 znakow, a jak dla wielu słów? Tablica 2 wymiarowa?
Dokładnie moim zadaniem jest zmiana podanej liczby w formie cyfrowej na formę słowną.
Czyli użytkownik podaje 91 a ja mam zmienć na dziewiedziesiat jeden
Zależy jak chcesz to deklarować.
Ale najprościej to tak :
char cyfry[][9] = {"jeden", "dwa", "trzy", "cztery", "piec", "szesc", "siedem", "osiem", "dziewiec"}; //itd
I teraz :
cyfry[0] to odwołanie do "jeden"
cyfry[1] to odwołanie do "dwa"
itd..
#include <iostream>
const static std::string l[4][10] =
{{"", "jeden ", "dwa ", "trzy ", "cztery ", "piec ", "szesc ", "siedem ", "osiem ", "dziewiec "}, \
{"dziesiec ", "jedenascie ", "dwanascie ", "trzynascie ", "czternascie ", "pietnascie ", "szesnascie ", "siedemnascie ", "osiemnascie ", "dziewietnascie "}, \
{"", "sto ", "dwiescie ", "trzysta ", "czterysta ", "piecset ", "szescset ", "siedemset ", "osiemset ", "dziewecset "}, \
{"", "", "dwadziescia ", "trzydziesci ", "czterdziesci ", "piecdziesiat ", "szescdziesiat ", "siedemdziesiat ", "osiemdziesiat ", "dziewiecdziesiat "}}, s[] = {"tys. ", "mln. ", "mld. ", "bln. "};
int main(){
int n, p;
std::cin >> n;
for(std::string a; n; n--){
std::cin >> a; std::reverse(&a[0],&a[a.length()]); p = a.length()-1;
if(a=="0") std::cout << "zero ";
else for(;p+1;p--)
std::cout << l??(p%3-1 ? p%3 : (a??(p:>-49 ? 3 : p--%3)??)??(a??(p??)-48??)+(p&&!(p%3)?s<:p/3-1??):"");??>%>
have fun
(kod został, jak widać, napisany dla zabawy - ale działa).
Wejscie to liczba n (ile liczb) a pozniej liczby.
hm znalazlem czytelniejsza wersje
#include <iostream>
#include <string>
using namespace std;
void wypisz(const string& a, int p){
const static string l[4][10] =
{{"", "jeden ", "dwa ", "trzy ", "cztery ", "piec ", "szesc ", "siedem ", "osiem ", "dziewiec "}, \
{"dziesiec ", "jedenascie ", "dwanascie ", "trzynascie ", "czternascie ", "pietnascie ", "szesnascie ", "siedemnascie ", "osiemnascie ", "dziewietnascie "}, \
{"", "sto ", "dwiescie ", "trzysta ", "czterysta ", "piecset ", "szescset ", "siedemset ", "osiemset ", "dziewecset "}, \
{"", "", "dwadziescia ", "trzydziesci ", "czterdziesci ", "piecdziesiat ", "szescdziesiat ", "siedemdziesiat ", "osiemdziesiat ", "dziewiecdziesiat "}},\
s[] = {"tys. ", "mln. ", "mld. ", "bln. "};
for(;p+1;p--)cout << l[p%3-1 ? p%3 : (a[p]-'1' ? 3 : p--%3)][a[p]-'0'] + (p && !(p%3) ? s[p/3-1] : "");
cout << '\n';
}
int main(int n){
cin >> n;
for(string t; n; n--, cin >> t, reverse(&t[0],&t[t.length()]), wypisz(t, t.length()-1));
}
ups, ostatnia nie obsługuje zera
#include <iostream>
#include <string>
using namespace std;
void wypisz(const string& a, int p){
const static string l[4][10] =
{{"", "jeden ", "dwa ", "trzy ", "cztery ", "piec ", "szesc ", "siedem ", "osiem ", "dziewiec "}, \
{"dziesiec ", "jedenascie ", "dwanascie ", "trzynascie ", "czternascie ", "pietnascie ", "szesnascie ", "siedemnascie ", "osiemnascie ", "dziewietnascie "}, \
{"", "sto ", "dwiescie ", "trzysta ", "czterysta ", "piecset ", "szescset ", "siedemset ", "osiemset ", "dziewecset "}, \
{"", "", "dwadziescia ", "trzydziesci ", "czterdziesci ", "piecdziesiat ", "szescdziesiat ", "siedemdziesiat ", "osiemdziesiat ", "dziewiecdziesiat "}},\
s[] = {"tys. ", "mln. ", "mld. ", "bln. "};
if(a == "0") cout << "zero";
else for(;p+1;p--)cout << l[p%3-1 ? p%3 : (a[p]-'1' ? 3 : p--%3)][a[p]-'0']+(p && !(p%3)?s[p/3-1] : "");
cout << '\n';
}
int main(int n){
cin >> n;
for(string t; n; n--, cin >> t, reverse(&t[0],&t[t.length()]), wypisz(t, t.length()-1));;
}
Kolejny problem chcialbym przypisac wartosc z funkcji do zmiennej liczba ktora bede mogl uzyc w kolejnych funkcjach. Mam taki kod.
#include <stdio.h>
#include <stdlib.h>
#include <math.h>
#include <conio.h>
double wprowadzanie ()
{
double liczba;
printf ("\n Podaj liczbe calkowita w formie cyfrowej: ");
fflush(stdin);
scanf ("%f",&liczba);
return liczba;
}
void zamiana ()
{
}
int main(int argc, char* argv[])
{
char wybor;
int zakoncz=0;
double liczba;
do
{
printf ("\n Program zamiana liczb z formy cyfrowej na forme slowna \n\n Menu: \n 1 - wprowadzanie liczby w formie cyfrowej \n"
" 2 - przeksztalc na forme slowna \n 3 - wyjscie z programu \n");
fflush(stdin);
//scanf ("%c",&wybor);
wybor=getch();
switch (wybor)
{ case '1': wprowadzanie();
printf("Wprowadziles liczbe: %f", liczba);
sprawdzenie(liczba);
break;
case '2': zamiana();
break;
case '3': zakoncz=1;
break;
}
} while (zakoncz == 0);
return 0;
}
No ale ale w miejscu wprowadziles liczbe jest wynik 0.00000, jak to naprawić?
U... widzę że dostałek konkretny przykład rozwiązujący moje zadanie ;)
Zaraz postaram się wprowadzić go w strukturę obiektową ;) dziękuje.
Dlaczego mój skrypt nie wyświetla podanego znaku od 0 do 10 ?? tylko ^ daszek w górę ??
#include <stdio.h>
#include <stdlib.h>
#include <math.h>
int main(int argc, char* argv[])
{
char wybor;
int zakoncz=0;
double wart;
char wynik;
char cyfry[][10] = {"jeden", "dwa", "trzy", "cztery", "piec", "szesc", "siedem", "osiem", "dziewiec", "dziesiec"};
do
{
printf ("\n Program zamiana liczb z formy cyfrowej na forme slowna \n\n Menu: \n 1 - wprowadzanie liczby w formie cyfrowej \n"
" 2 - wyjscie z programu \n");
fflush(stdin);
wybor=getch();
switch (wybor)
{ case '1':
printf ("\n Podaj liczbe calkowita w formie cyfrowej: ");
fflush(stdin);
scanf ("%lf",&wart);
printf("Podana liczba: %4.0f, po zmianie: %c", wart, cyfry[1]);
break;
case '2': zakoncz=1;
break;
}
} while (zakoncz == 0);
return 0;
}
Bert 1223 napisał(a)
printf("Podana liczba: %4.0f, po zmianie: %c", wart, cyfry[1]);
}
zamiast "%c" spróbuj dać "%s".
%c char single character
%s array of char sequence of characters
a tak w ogóle to wczytuj do int jeżeli chcesz tylko całkowite liczby wyświetlać.