Изменить содержимое файла, дописав к числу его представление в словесном виде - 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, что означает успешное выполнение.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д