Изменить содержимое файла, дописав к числу его представление в словесном виде - 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;
}

Объяснение кода листинга программы

  1. В функции wordToDigit используется массив строк name, содержащий числительные от 0 до 20.
  2. В функции digitToWord используется массив строк name, содержащий числительные от 0 до 9.
  3. В функции nameOfMonth используется массив строк month, содержащий названия месяцев от 0 до 12.
  4. В функции century используется массив строк age, содержащий числительные от 0 до 9.
  5. В функции millenium используется массив строк mill, содержащий числительные от 0 до 2.
  6. В функции main считывается число num с помощью cin.
  7. Вызывается функция millenium для вывода тысячелетия числа num.
  8. Вызывается функция century для вывода века числа num.
  9. Используется условный оператор if для определения, является ли последняя цифра числа num меньше 20.
  10. Если последняя цифра меньше 20, вызывается функция wordToDigit для вывода этой цифры.
  11. Если последняя цифра больше или равна 20, вызывается функция digitToWord для вывода десятки числа num, а затем вызывается функция wordToDigit для вывода последней цифры числа num.
  12. В конце программы вызывается функция system(pause), чтобы программа приостановилась до нажатия клавиши.
  13. Программа возвращает 0, что означает успешное выполнение.

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

12   голосов , оценка 3.75 из 5
Похожие ответы