Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > C/C++ программирование > Общие вопросы C/C++
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 06.12.2009, 01:09   #1
lubafffka
Пользователь
 
Регистрация: 05.11.2008
Сообщений: 46
По умолчанию исправить ошибки

Текстовый файл содержит программу на языке Pascal. Программа обязательно содержит раздел описания переменных, процедуры ввода/вывода и операторы присваивания. написать программу на C++, диагностирующую следующие ошибки:
1. переменная, используемая в программе не описана;
2. несоответствие типов в операторе присваивания и в процедурах read, write;
3.неверный идентификатор.
Код:
#define s0 "program"
#define s1 "var"
#define s2 "begin"
#define s3 "end."
#define m 100
struct stack{
             char per[m];
             char tip[m];
             stack *p;
             }*pv,*top;
void prosmotr(void);
void menu(void);
void oshibki(stack*);
void proverka(char,int,int);
void proverka(char*,int,int);
void proverka_pervogo(char,int,int);
void proverka_pervogo(char*,int,int);
//--
int main() 
 {menu();
  return 1;} 
//--
void oshibki(stack *pv)
{  FILE *f;
   stack **top;
   char name[30],str[m][m],tip1[m],per1[m],per2[m],tip2[m],str1[m];
   int i,j,n,k,l=1,s;
       char *per[m];
             char *tip[m];
   printf ("\nWrite name of file: ");
   scanf("%s",&name);                          // имя файла
   while(( f=fopen (name,"rt"))==NULL)
           {
           printf("\nfail s dannym imenem ne sushchestvuet\nimya faila: ");
           scanf("%s",&name);
           }
   n=0;
   while(!feof(f))
                  {
                  fgets (str[i],m,f);
                  i++;
                  n++;
                  } printf("%d",n); 
   k=1;
   for (i=1;i<=n;i++)
                     while(str[i][j]!=' ')
                          str1[k++]=str[i][j++];
                         
                     if(strstr(str1,s0)==NULL)             //ishem program
                                          { while(str[i][j]==' ')     //пропускаем  пробелы
                                                               j++;
                                            proverka_pervogo(str[m][m],i,j); //переходим к следующему символу                                    
                                            while(str[i][j]!=';')                    // poka ne  ;
			                                             proverka(str[m][m],i,j); 
                                          }     
                     if(strstr(str[i],s1)!=NULL)                   //ищем begin
                                    while (strstr(str[i],s2)!=NULL)      //пока не  end
                                    {  while (str[i][j]!='\0')             //пока не конец строки
                                              while (str[i][j]!=':')                 //пока не :
                                              {          k=1;
                                                         while(str[i][j]==' '){j++;}   //пропускаем  пробелы
                                                         stack *pv= new stack;          // выделяем память под ячейку
                                                         while(str[i][j]!=' ' || str[i][j]!=',')       //пока не пробел и не запятая
                                                                     pv->per[k++]=str[i][j++];              //читаем переменную                     
                                                         pv->tip[i]=' ';             //в тип заносим пробел
                                                         pv->p=*top;                
                                                         *top=pv;
                                                
                                                }
                                                while (str[i][j]!=';' || str[i][j++]!=' ')                 
                                                      tip1[l++]=str[i][j++];                       //читаем тип
                                                             while(pv)
                                                                      while(pv->tip[i]==' ')             //пока пустые ячейки заносим в них тип
                                                                      for (i=1;i<=(strlen(tip1));i++) 
                                                                      pv->tip[i]=tip1[i];
                                                                      pv=pv->p;
                                                                      i++;
                                    }
                     k=1;l=1;s=0;
                     while(strstr(str[i],s3)!=NULL)                   //пока не энд
                                  if(strstr(str[i],":="))                    //ищем :=
                                          s=j;                  //запоминаем элемент
                                  while(str[i][j]!=';')               //пока не ;
                                      per1[k++]=str[i][j++];       //записываем переменную слева
lubafffka вне форума Ответить с цитированием
Старый 06.12.2009, 01:10   #2
lubafffka
Пользователь
 
Регистрация: 05.11.2008
Сообщений: 46
По умолчанию

Код:
                          
                                  k=1;          
                                  for(j=1;j<=s;j++)                      
                                     while(str[i][j]!=' ')
                                               per2[k++]=str[i][j];       //записываем переменную справа
                     k=1;
                     pv=*top;
                     while(pv)                          
                            {  if(per1==pv->per)                                 //смотрим описана ли переменная  
                               {   k++;
                                   for (i=1;i<=(strlen(pv->tip));i++)           
                                        tip2[i]=pv->tip[i];             // смотрим тип
                               }
                               pv=pv->p;
                            }          
                     if(k!=1)
                             printf("peremennaya %s ne opisana.\n",per1);
                     pv=*top;
                     k=1;
                     while(pv)
                              {  if(per2==pv->per)                                   //смотрим описана ли переменная 
                                 {   k++;
                                     for (i=1;i<=(strlen(pv->tip));i++)       
                                        tip2[i]=pv->tip[i];                // смотрим тип
                                 }
                                 pv=pv->p;
                              }          
                     if(k!=1)
                             printf("peremennaya %s ne opisana.\n",per2);
                     if (tip1!=tip2)                                     
                        printf("nesootvetstvie tipov.\n");
                                              
                     pv=*top;
                     proverka_pervogo(pv->per,i,j);
                     pv=pv->p;
                     while(pv)
                      {  proverka(pv->per,i,j);
                         pv=pv->p;
                      }
    }
//--
void proverka_pervogo(char str[m][m],int i, int j)
     {if ((str[i][j]>='a' && str[i][j]<='z') || (str[i][j]>='A' && str[i][j]<='Z')){}                    
	                   else printf("\n neverno opisana peremennaya, stroka %d\n",i);
                            getch();
                            j++;
      return ;
     }
//--
void proverka(char str[m][m],int i, int j)
     {if ((str[i][j]>='a' && str[i][j]<='z') || (str[i][j]>='A' && str[i][j]<='Z') || (str[i][j]=='_') || (str[i][j]<='0' && str[i][j]<='9')){}                    
	                   else printf("\n neverno opisana peremennaya, stroka %d\n",i);
                            getch();
                            j++;
      return ;
     }
//--
void menu(void) //меню
 {int k;
 // clrscr();
  printf("menu\n1. prosmotr\n2. poisk oshibok\n3. exit\nvash vybor: ");
  scanf("%d",&k);
  switch (k)
   {case 1:{prosmotr(); menu(); break;}
    case 2:{oshibki(pv); menu(); break;}
    case 3:{break;}}
  return ;} 
//--
  void prosmotr(void)
{  FILE *f;
   char name[30],str[m];         
printf("------------------------------------------------");
printf ("\nWrite name of file: ");
scanf("%s",&name);                          // имя файла
while(( f=fopen (name,"rt"))==NULL)
{printf("fail s dannym imenim ne sushchestvuet\nimya faila: ");
   scanf("%s",&name);}
printf("\n vasha programma:\n");
while(fgets(str,m,f))
               puts(str);
               
fclose(f);
}
lubafffka вне форума Ответить с цитированием
Старый 06.12.2009, 01:11   #3
lubafffka
Пользователь
 
Регистрация: 05.11.2008
Сообщений: 46
По умолчанию

помогите пожалуйста исправить ошибки...
lubafffka вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
помогите исправить ошибки Euforia_PZAS09_1 Паскаль, Turbo Pascal, PascalABC.NET 0 19.10.2009 21:41
C++... Необходимо исправить 4 ошибки... hen Помощь студентам 4 17.04.2009 04:28
Помогите исправить ошибки Satorin Общие вопросы Delphi 4 25.12.2008 21:35
помогите исправить ошибки kermit Помощь студентам 1 21.06.2008 10:44
Помогите исправить ошибки ...С++ Настенька Помощь студентам 1 25.03.2007 23:30