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