Изменить содержимое файла, дописав к числу его представление в словесном виде - C (СИ)
Формулировка задачи:
Помогите плиззз!
Программа должна изменить содержимое входного файла следующим образом: если в тексте встречается целое или действительное число (разделитель точка) от 0 до 9999 , то рядом в скобках записать данное число прописью( дробную часть ограничить двумя разрядами).
#include <stdio.h>
int x[7];
char a[20];
char b[200];
int z,h=0,i,j;
char p5(int &i);
FILE *fp;
char p1(){
switch(x[i]){
case 1: printf(" odna tisicha"); i++; return i;
case 2: printf(" dve tisachi"); i++; return i;
case 3: printf(" tri tisachi"); i++; return i;
case 4: printf(" chetire tisachi"); i++; return i;
case 5: printf(" piat tisach"); i++; return i;
case 6: printf(" shest tisach"); i++; return i;
case 7: printf(" sem tisach"); i++; return i;
case 8: printf(" vosem tisach"); i++; return i;
case 9: printf(" deviat tisach"); i++; return i;}
return 1;
}
char p2(int &i){
switch(x[i]){
case 1: printf(" sto"); i++; return i;
case 2: printf(" dvesti"); i++; return i;
case 3: printf(" trista"); i++; return i;
case 4: printf(" 4tirista"); i++; return i;
case 5: printf(" piatsot"); i++; return i;
case 6: printf(" shestsot"); i++; return i;
case 7: printf(" semsot"); i++; return i;
case 8: printf(" vosemsot"); i++; return i;
case 9: printf(" deviatsot"); i++; return i;
case 0: printf(""); i++; return i;}
return i;
}
char p3(int &i){
switch(x[i]){
case 1: i++; p5(i); return i;
case 2: printf(" dvadcat "); i++; return i;
case 3: printf(" tridchat "); i++; return i;
case 4: printf(" sorok "); i++; return i;
case 5: printf(" piatdesiat "); i++; return i;
case 6: printf(" shestdesat "); i++; return i;
case 7: printf(" semdesat "); i++; return i;
case 8: printf(" Vosemdesat "); i++; return i;
case 9: printf(" devianosto "); i++; return i;}
return i;
}
char p4(int &i){
switch(x[i]){
case 1: printf(" Odin "); i++; return i;
case 2: printf(" Dva "); i++; return i;
case 3: printf(" Tri "); i++; return i;
case 4: printf(" 4etire "); i++; return i;
case 5: printf(" Piat"); i++; return i;
case 6: printf(" Shest"); i++; return i;
case 7: printf(" Sem"); i++; return i;
case 8: printf(" Vosem"); i++; return i;
case 9: printf(" Deviat"); i++; return i;}
return i;
}
char p5(int &i){
switch(x[i]){
case 1: printf(" Odinadcat "); i++; return i;
case 2: printf(" Dvenadcat "); i++; return i;
case 3: printf(" Trinadcat "); i++; return i;
case 4: printf(" 4etirnadcat "); i++; return i;
case 5: printf(" Piatnadcat"); i++; return i;
case 6: printf(" Shestnadcat"); i++; return i;
case 7: printf(" Semnadcat"); i++; return i;
case 8: printf(" Vosemnadcat"); i++; return i;
case 9: printf(" Deviatnadcat"); i++; return i; }
return i;
}
rasp(int &i){
i=0;
if(h==0)
switch(z){
case 4: p1();p2(i);p3(i);p4(i); return 0;
case 3: p2(i);p3(i);p4(i); return 0;
case 2: p3(i);p4(i); return 0;
case 1: p4(i); return 0;
}
if(h==4)
switch(z){
case 6: p1();p2(i);p3(i);p4(i);printf(" chelih");p3(i);p4(i);printf(" sotih "); return 0;
case 5: p1();p2(i);p3(i);p4(i);printf(" chelih");p4(i);printf(" decatih "); return 0;
}
if(h==3)
switch(z){
case 5: p2(i);p3(i);p4(i);printf(" chelih");p3(i);p4(i);printf(" sotih"); return 0;
case 4: p2(i);p3(i);p4(i);printf(" chelih");p4(i);printf(" decatih"); return 0;
}
if(h==2)
switch(z){
case 4: p3(i); p4(i); printf("chelih"); p3(i); p4(i); printf("sotih"); return 0;
case 3: p3(i); p4(i); printf("chelih"); p4(i); printf("decatih"); return 0;
}
if(h==1)
switch(z){
case 3: p4(i);printf("chelih");p3(i);p4(i);printf("sotih"); return 0;
case 2: p4(i);printf("chelih");p4(i);printf("decatih"); return 0;
}
i=0;
h=0;
}
void input(char s)
{
FILE *fp;
fp=fopen("in.txt","r+");
i=0;
while(!feof(fp))
{
z=0;
s=getc(fp);
if(s==0x30){
x[i]=0;i++;}
if(s==0x31){
x[i]=1;i++;}
if(s==0x32){
x[i]=2;i++;}
if(s==0x33){
x[i]=3;i++;}
if(s==0x34){
x[i]=4;i++;}
if(s==0x35){
x[i]=5;i++;}
if(s==0x36){
x[i]=6;i++;}
if(s==0x37){
x[i]=7;i++;}
if(s==0x38){
x[i]=8;i++;}
if(s==0x39){
x[i]=9;i++;}
if(s=='.'){
h=i;}
z=i;
if (s==' '||isalpha(s)||feof(fp)){
for(i=0;i<1;i++)
for(j=0;j<20;j++)
printf("%c",a[i][j]);
rasp(i);i=0; }
printf("%c",s);
}
printf("\n");
printf("\n");
fclose(fp);
}
void main(){
char s;
input(s);
}Решение задачи: «Изменить содержимое файла, дописав к числу его представление в словесном виде»
textual
Листинг программы
#include <iostream>
using namespace std;
void wordToDigit(int number)
{
const char *name[21]={"","первое","второе","третье","четвёртое","пятое",
"шестое","седьмое","восьмое","девятое","десятое","одинадцатое",
"двенадцатое","тринадцатое","четырнадцатое","пятнадцатое","шестнадцатое",
"семнадцатое","восемнадцатое","девятнадцатое"};
cout<<name[number]<<" ";
}
void digitToWord(int number)
{
const char* name[10]={"","","двадцать","тридцать","сорок","пятьдесят",
"шестьдесят","семьдесят","восемьдесят","девяносто"};
cout<<name[number]<<" ";
}
void nameOfMonth(int number)
{
const char* month[13]={"","январь","февраль","март","апрель","май","июнь",
"июль","август","сентябрь","октябрь","ноябрь","декабрь"};
cout<<month[number]<<endl;
}
void century(int number)
{
const char* age[10]={"","сто","двести","триста","четыреста","пятьсот",
"шестьсот","семьсот","восемьсот","девятьсот"};
cout<<age[number]<<" ";
}
void millenium(int number)
{
const char* mill[3]={"","тысяча","две тысячи"};
cout<<mill[number]<<" ";
}
int main()
{
int num;
cin>>num;
millenium(num/1000);
century(num%1000/100);
if( (num%100)<20)
wordToDigit(num%100);
else
{
digitToWord(num%100/10);
wordToDigit(num%10);
}
system("pause");
return 0;
}
Объяснение кода листинга программы
- В функции
wordToDigitиспользуется массив строкname, содержащий числительные от 0 до 20. - В функции
digitToWordиспользуется массив строкname, содержащий числительные от 0 до 9. - В функции
nameOfMonthиспользуется массив строкmonth, содержащий названия месяцев от 0 до 12. - В функции
centuryиспользуется массив строкage, содержащий числительные от 0 до 9. - В функции
milleniumиспользуется массив строкmill, содержащий числительные от 0 до 2. - В функции
mainсчитывается числоnumс помощьюcin. - Вызывается функция
milleniumдля вывода тысячелетия числаnum. - Вызывается функция
centuryдля вывода века числаnum. - Используется условный оператор
ifдля определения, является ли последняя цифра числаnumменьше 20. - Если последняя цифра меньше 20, вызывается функция
wordToDigitдля вывода этой цифры. - Если последняя цифра больше или равна 20, вызывается функция
digitToWordдля вывода десятки числаnum, а затем вызывается функцияwordToDigitдля вывода последней цифры числаnum. - В конце программы вызывается функция
system(pause), чтобы программа приостановилась до нажатия клавиши. - Программа возвращает 0, что означает успешное выполнение.