Перевод с С++ на язык Pascal

Узнай цену своей работы

Формулировка задачи:

Здравствуйте. Помогите пожалуйста перевести код на язык Pascal
 #include<stdio.h>
 
#include<windows.h>
 
#include<conio.h>
 
#include<math.h>
 
#include<string.h>
 
#define L 5
 
int N,K=0;
 
struct unit{int key1;float key2[L];char data[L];};
 
int comparison(unit a,unit b,int q)
 
{
 
if(q==1)
 
{
 
for(int i=0;i<L;i++)
 
{
 
if(a.key2[i]>b.key2[i])return 1;
 
else if(a.key2[i]<b.key2[i])return -1;
 
}
 
return 0;
 
}
 
else if(!q)
 
{
 
if(a.key1<b.key1)return -1;
 
else if(a.key1>b.key1)return 1;
 
else return 0;
 
}
 
else
 
{
 
for(int i=0;i<L;i++)
 
{
 
if(a.data[i]>b.data[i])return 1;
 
else if(a.data[i]<b.data[i])return -1;
 
}
 
return 0;
 
}
 
}
 
unit* shell(unit *items,int q)
 
{
 
register int i, j, gap;
 
unit x;
 
gap=(int)(N/2);
 
while(gap>0)
 
{
 
for(i=gap;i<N;i++)
 
{
 
x=items[i];
 
for(j=i-gap;(comparison(x,items[j],q)==-1)&&(j>=0);j=j-gap)
 
{
 
items[j+gap]=items[j];
 
}
 
items[j+gap]=x;
 
}
 
gap=(int)(gap/2);
 
}
 
return items;
 
}
 
unit* search(unit*I)
 
{
 
int a1,a2,N1=0,N2=0;
 
unit b1,b2;
 
unit* A=new unit[N];
 
unit* B=new unit[N];
 
for(int i=0;i<N;i++)
 
{
 
A[i]=I[i];
 
B[i]=I[i];
 
}
 
A=shell(A,0);
 
B=shell(B,1);
 
printf("Input bottom border key(int):\t");
 
scanf("%d",&a1);
 
printf("Input top border key(int):\t");
 
scanf("%d",&a2);
 
for(int i=0;i<N;i++)
 
{
 
if(A[i].key1>a2)break;
 
if(A[i].key1>=a1)A[N1++]=A[i];
 
}
 
A=(unit*)realloc(A,sizeof(unit)*(N1));
 
for(int i=0;i<L;i++)
 
{
 
printf("Input %d elemet bottom border key(float):\t",i+1);
 
scanf("%f",&b1.key2[i]);
 
}
 
for(int i=0;i<L;i++)
 
{
 
printf("Input %d element top border key(float):\t",i+1);
 
scanf("%f",&b2.key2[i]);
 
}
 
for(int i=0;i<N;i++)
 
{
 
if (comparison(B[i],b2,1)==1)break;
 
if(!(comparison(B[i],b1,1)==-1))B[N2++]=B[i];
 
}
 
B=(unit*)realloc(B,sizeof(unit)*(N2));
 
for(int i=0;i<N1;i++)
 
{
 
for(int j=0;j<N2;j++)
 
{
 
if((A[i].key1==B[j].key1)&&!comparison(A[i],B[j],1)&&!comparison(A[i],B[j],2))A[K++]=A[i];
 
}
 
}
 
A=(unit*)realloc(A,sizeof(unit)*(K));
 
return A;
 
}
 
void main()
 
{
 
SYSTEMTIME tim;
 
GetSystemTime(&tim);
 
srand(tim.wMilliseconds);
 
printf("Input count elements:\t");
 
scanf("%d",&N);
 
unit* I=new unit[N];
 
unit* O;
 
for(int i=0;i<N;i++)
 
{
 
I[i].key1=rand();
 
for(int j=0;j<L;j++)I[i].key2[j]=rand()/100.;
 
for(int j=0;j<L;j++)I[i].data[j]=(char)(rand()%220+32);
 
}
 
for(int i=0;i<N;i++)
 
{
 
printf("%d\t",I[i].key1);
 
for(int j=0;j<L;j++)printf("%.3f\t",I[i].key2[j]);
 
printf("\t");
 
for(int j=0;j<L;j++)printf("%c",I[i].data[j]);
 
printf("\n");
 
}
 
O=search(I);
 
printf("--------Search--------\n");
 
for(int i=0;i<K;i++)
 
{
 
printf("%d\t",O[i].key1);
 
for(int j=0;j<L;j++)printf("%.3f\t",O[i].key2[j]);
 
printf("\t");
 
for(int j=0;j<L;j++)printf("%c",O[i].data[j]);
 
printf("\n");
 
}
 
getch();
 
}

Решение задачи: «Перевод с С++ на язык Pascal»

textual
Листинг программы
#include<stdio.h>
#include<string.h>
#include<conio.h>
#include<stdlib.h>
#include<locale.h>
#include<string.h>
structs
 {
   intk;
   charp;
   floatl;
  charn[20];
   }*mas, **mas1, m;
  struct s* vvod(struct s* mas, int &kolvo_el)
       {
            printf("Сколько элемнтов будет в информационном массиве?");
                scanf("%d", &kolvo_el);
                mas=(s*)malloc(kolvo_el*sizeof(s));
            printf("Введите данные:\n ");
                for(int i=0;i<kolvo_el;i++)
           {
                printf("Введите mas[%d]: ", i);
                    scanf("%d", &mas[i].k);
                    scanf("%s", &mas[i].p);
                    scanf("%f", &mas[i].l);
                    scanf("%s", &mas[i].n);
            }
  return mas;
       } 
 struct s* sortirovka1(struct s*mas, int kolvo_el)
   {
       int gap, i, j;
          gap=(int)(kolvo_el/2);
               while(gap>0)
       {
           for(i=gap;i<kolvo_el;i++)
                {
                   m=mas[i];
                       for( j=i-gap;(m.k<mas[j].k)&&(j>=0);j=j-gap)
                   {
                     mas[j+gap]=mas[j];
                   }
                 mas[j+gap]=m;
                }
      gap=(int)(gap/2);
       }
  return mas;
   }
 struct s* sortirovka2(struct s*mas, int kolvo_el)
   {
      int gap, i, j;
            gap=(int)(kolvo_el/2);
                  while(gap>0)
                  {
                      for(i=gap;i<kolvo_el;i++)
                      {
                        m=mas[i];
                            for( j=i-gap;(m.p<mas[j].p)&&(j>=0);j=j-gap)
                            {
                              mas[j+gap]=mas[j];
                             }
                         mas[j+gap]=m;
                      }
                     gap=(int)(gap/2);
                   }
   return mas;
     }
 struct s* sortirovka3(struct s*mas, int kolvo_el)
    {
       int gap, i, j;
            gap=(int)(kolvo_el/2);
                 while(gap>0)
                  {
                     for(i=gap;i<kolvo_el;i++)
                        {
                          m=mas[i];
                               for( j=i-gap;(m.l<mas[j].l)&&(j>=0);j=j-gap)
                                {
                                 mas[j+gap]=mas[j];
                                 }
                                mas[j+gap]=m;
                         }
                        gap=(int)(gap/2);
                   }
      return mas;
    }
 struct s* sortirovka4(struct s*mas, int kolvo_el)
   {
         int gap, i, j;
         gap=(int)(kolvo_el/2);
               while(gap>0)
              {
                 for(i=gap;i<kolvo_el;i++)
                 {
                   m=mas[i];
                         for( j=i-gap;(m.n<mas[j].n)&&(j>=0);j=j-gap)
                             {
                               mas[j+gap]=mas[j];
                              }
                              mas[j+gap]=m;
                 }
                gap=(int)(gap/2);
              }
    return mas;
    }
   struct s** poisk(struct s** mas1, int c, int kolvo_el)
    {
       int t=0, i, j;
       int K;
       char P, str[20]="",str1[20]="";
       float L;
             if(c==1)
             {
              printf("Введите данные для поиска:\t");
                  scanf("%d", &K);
                     for(i=c-1;i<c;i++)
                         for(j=0;j<kolvo_el;j++)
                         {
                           if(mas1[i][j].k==K)
                           printf("Найденный элемент: %d %c %f %s", mas1[i][j].k, mas1[i][j].p, mas1[i][j].l, mas1[i][j].n);
                                  else
                                       t++;
                                             if(t==kolvo_el)
                                             printf("Данные не найдены");
                          }
             }
       if(c==2)
  {
       printf("Введите данные для поиска:\t");
       scanf("%c", &P);
            for(i=c-1;i<c;i++)
               for(j=0;j<kolvo_el;j++)
      {
        if(mas1[i][j].p==P)
        printf("Найденный элемент: %d %c %f %s", mas1[i][j].k, mas1[i][j].p, mas1[i][j].l, mas1[i][j].n);
             else
                t++;
                   if(t==kolvo_el)
                   printf("Данные не найдены");
       }
   }
   if(c==3)
      {
         printf("Введите данные для поиска:\t");
         scanf("%f", &L);
            for(i=c-1;i<c;i++)
               for(j=0;j<kolvo_el;j++)
               {
                if(mas1[i][j].l==L)
                printf("Найденный элемент: %d %c %f %s", mas1[i][j].k, mas1[i][j].p, mas1[i][j].l, mas1[i][j].n);
                     else
                         t++;
                            if(t==kolvo_el)
                            printf("Данные не найдены");
               }
      }
     if(c==4)
      {
           printf("Введите данные для поиска:\t");
           scanf("%s", &str);
               for(i=c-1;i<c;i++)
                   for(j=0;j<kolvo_el;j++)
                   {
                      if(strcmp(str,mas1[i][j].n)==0)
                      printf("Найденный элемент: %d %c %f %s", mas1[i][j].k, mas1[i][j].p, mas1[i][j].l, mas1[i][j].n);
                            else
                               t++;
                                  if(t==kolvo_el)
                                  printf("Данные не найдены");
                    }
      }
  return0;
  }
       void main()
           {
             setlocale(LC_ALL, "Rus");
              int i, j, c, kolvo_el;
                  mas=vvod(mas, kolvo_el);
                       re:printf("\n\n\nПо какому информационному полю вы хотите осуществить поиск?\nДля выполнения поиска                     по полю int нажмите 1\nДля выполнения поиска по полю char нажмите 2\nДля выполнения поиска по полю float нажмите 3\nДля выполнения поиска по полю char[] нажмите 4\n");
                      scanf("%d", &c);
                      mas1=(s**)malloc(4*sizeof(s*));
                            for(i=0;i<4;i++)
                      mas1[i]=(s*)malloc(kolvo_el*sizeof(s));
                            for(i=0;i<4;i++)
                                 for(j=0;j<kolvo_el;j++)
                      mas1[i][j]=mas[j];
                      switch(c)
                  {
                      case 1:
                      mas1[0]=sortirovka1(mas, kolvo_el);
                      poisk(mas1, c, kolvo_el);
                              break;
                      case 2:
                      mas1[1]=sortirovka2(mas, kolvo_el);
                      poisk(mas1, c, kolvo_el);
                              break;
                      case 3:
                      mas1[2]=sortirovka3(mas, kolvo_el);
                      poisk(mas1, c, kolvo_el);
                              break;
                      case 4:
                      mas1[3]=sortirovka4(mas, kolvo_el);
                      poisk(mas1, c, kolvo_el);
                              break;
                      default:
             exit(1);
                  }
       goto re;
     getch();
   }

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

Этот код написан на языке Pascal и выполняет сортировку и поиск в отсортированном массиве структур 's'. Структура 's' содержит следующие поля:

  • k: целочисленное значение
  • p: символ
  • l: число с плавающей точкой
  • n: строка символов Функция 'vvod' используется для ввода данных в массив 'mas'. Функция 'sortirovka1', 'sortirovka2', 'sortirovka3' и 'sortirovka4' выполняют сортировку массива 'mas' по различным критериям. Функция 'poisk' используется для поиска данных в отсортированном массиве. Программа начинается с запроса у пользователя информации о том, по какому полю он хочет выполнить поиск. Затем происходит сортировка массива 'mas' в соответствии с выбранным полем, и выполняется поиск в отсортированном массиве. Если данные найдены, они выводятся на экран. Если данные не найдены, выводится соответствующее сообщение.

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


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

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

7   голосов , оценка 3.857 из 5