Форум программистов, компьютерный форум CyberForum.ru

C++ сортировка структуры по возрастанию времени - C++

Войти
Регистрация
Восстановить пароль
Другие темы раздела
C++ чем отличается вызов объекта через "." и через "->" http://www.cyberforum.ru/cpp-beginners/thread34346.html
Здравствуйте. Вот создал топик для тех, кто желает сам познать С++, но у которых есть вопросы по базовым знаниям. Начну с вопроса: чем отличается вызов объекта через "." и через "->" И в каких случаях лучше применять тот или иной способ.
C++ Разложить числа на простые множители Здравствуйте, всем. Помогите пожалуйста может кто знает. Как в C++ разложить числа на простые множители. Составить программу, которая выдаёт разложение данного числа N на простые множители. Например 128=2*2*2*2*2*2*2. хоть что нибудь напишите заранее спасибо http://www.cyberforum.ru/cpp-beginners/thread34342.html
C++ При присвоении числа float появляется хвост!
присваеваю переменной Float 1.44 получаю 1,44000005722046 может FloatToStr работает некоректно? class computer { public: computer(char *, int, float); String Text(void); private: char name;
Приближенное вычисление значения функции cos(x) Отблагодарю голосами в контакте! C++
Вычислить с точностью е = 10 ^ -4 значение функции ________________________ Представленной рядом в 28 точках, которые наиболее полно охватывают область определения данной функции. Найти точное и ближайшее значение функции, абсолютную и относительную погрешности вычислений в этих точках Добавлено через 44 секунды http://www.cyberforum.ru/attachment.php?attachmentid=3971&d=1242327107 функция
C++ сортировка матрицы http://www.cyberforum.ru/cpp-beginners/thread34319.html
Доброго времени суток. Задание: поменять в каждой строке максимальный и минимальный элементы на 0. Я думаю ошибка в функции void SortMatrix(int **X, const int K, const int L). Посмотрите, пожалуйста, в чем проблема. #include <iostream> #include <stdio.h> #include <conio.h> #include <math.h> int **CreateMatrix(const int K,const int L); void FreeMatrix(int **X, const int L);
C++ дефрагментатор на С++ Помогите! есть ли у кого-нибуть ссылочка дефрагментатора на С++ с исходниками????буду очень благодарна!! заранее спасибо;) подробнее

Показать сообщение отдельно
TOSHH
Сообщений: n/a

C++ сортировка структуры по возрастанию времени - C++

15.05.2009, 19:07. Просмотров 1997. Ответов 0
Метки (Все метки)

ребят,такое задание было у меня в Pascal,в С++ возникли проблемы с ним,не могу провести сортировку(хотя бы любым способом),помогите пожалуйста,ввод я обеспечил,а дальше никак((

В процессе функционирования АСУ ВД в файле фиксируются данные о самолетах, выполняющих полет в зоне действия АСУ. Каждая запись имеет структуру типа:

11:15 ТУ-154М Б-3726 Ташкент
время посадки Марка ЛА бортовой т
номер


1) подготовить программу, сортирующую записи с использованием индексной сортировки линейным методом в порядке возрастания времени посадки; результаты печатать в виде таблицы;
2) обеспечить входной контроль времени посадки, уникальности бортового номера и и пункта отправления, выполнить отладку и тестирование.

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
/*******************************************************************************
 *                              С  +  +                                        *
 *-----------------------------------------------------------------------------*
 * Project Type  : Win32 Console Application                                   *
 * Project Name  : 11111                                                       *
 * File Name     : main.CPP                                                    *
 * Programmer(s) :                                                 *
 * Modifyed By   :                                                             *
 * Created       : 29/04/09                                                    *
 * Last Revision : 6/05/09                                                     *
 * Comment(s)    : СТРУКТУРЫ, МАССИВ СТРУКТУР, УКЗАТЕЛЬ НА СТРУКТУРУ           *
 *                 ПЕРЕДАЧА МАССИВА СТРУКТУР В ФУНКЦИЮ                         *
 *                 ЧТЕНИЕ МАССИВА СТРУКТУР ИЗ ФАЙЛА                            *
 *                 ЗАПИСЬ МАССИВА СТРУКТУР В ФАЙЛ                              *
 *                 ВСЕ ФАЙЛЫ ТЕКСТОВЫЕ                                         *
 *                                                                             *
 *******************************************************************************/
#include <iostream>
 
using namespace std;
// читаем данные с файла
#include <stdio.h>
#include <conio.h>
#include <stdlib.h>
 
 
 
 
struct Airplane
{
   char vremy[10];    //время
   char marka[40];    //марка
   char bort_num[10]; //бортовой номер
   char punkt[20];    //пункт отправления
};
 
 
//ПРОТОТИПЫ ФУНКЦИЙ
//void PrintStud (Airplane *pSt, int QStud); //печать структуры
 
 
 
 
// Главная функция прорграммы
 
void main()
{
 
 
 
//===============================================================
//чтение массива стуктур из файла
//образец файла исходных данных STUD1.TXT
 
//данные идут с 1-й позиции
 
    const M_MAX = 10;
 
    const char fNAME[]="STUD1.TXT";
    const char fNAME_Out[]="RES1.dat";
 
 
     FILE *fp=NULL;            // объявим указатель на входной файл
     FILE *fp_out=NULL;        // объявим указатель на выходной файл
 
     int NRec;                 //число записей
     int i,k,j;
     
    
    Airplane AGroup[M_MAX], ASt;
    
     fp = fopen (fNAME,"rt");          //открытие входного файла
     if (fp == NULL)
     {
       fprintf(stderr,"\a\n\tCannot open file %s ! \n\n", fNAME);
 //      return 1;
    }
//-----------------------------------------------
    i=0;
printf ("\n\t AIRPLANE LIST \n");
     cout<<endl;
 cout<<" _____________________________________ "<<endl;
     cout<<"| Vremy |  Marka  |  Bort  |   Punkt  |"<<endl;
     cout<<"|_______|_________|________|__________|"<<endl;
     while ((!feof(fp)) && (i < M_MAX))
     {
 
    
        
//чтение в массив        
 
         fscanf (fp," %s %s %s %s ",  AGroup[i].vremy,AGroup[i].marka, AGroup[i].bort_num, AGroup[i].punkt); //&AGroup[i].name -работает
 
    
     
         printf ("%s %s %s %s %s %s %s %s     \n","|",AGroup[i].vremy,"|",AGroup[i].marka,"|",AGroup[i].bort_num,"|", AGroup[i].punkt);
        
         cout<<"|_______|_________|________|__________|"<<endl;
         i++;
         k=i;  
     }
   NRec = i;//  i - 1; //без проверки !!!
 
   fclose(fp);
 
 
 
 
 
 
//----------------------------------------------------------------
запись результатов в файл
 
     if ((fp_out = fopen (fNAME_Out,"wt")) == NULL)
     {
      fprintf(stderr,"\a\n\tCannot open file %s ! \n\n", fNAME_Out);
     return 1;
    }
 
    пишем группу самолетов в файл
     for (i=0; i<NRec; i++)
     {
          fprintf (fp_out, "  %s %s %s %s \n", AGroup[i].vremy 
                                                     , AGroup[i].marka
                                                     , AGroup[i].bort_num
                                                     , AGroup[i].punkt);  //форматная запись в файл
     }//for i
    
     fclose(fp_out);   // закрываем выходной файл
 
    
 
 
}//main()
Эта программа в Pascal
Pascal
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
program zapisy;
uses crt;
const
 maxn=20;         {максимальное число записей}
 fname='zap.txt'; {имя файла}
type
 zap=record   {запись zap}
     time:string[5];  {поле записи - time }
     marka:string[8]; {поле записи-marka}
     bort:string[7];  {поле записи-bort}
     punkt_otpravlenya:string[15]; {поле записи- punkt_otpravlenya}
 
     end;
 vec_mas=array[1..maxn] of zap;      {массив записей}
 vec_ind=array[1..maxn] of integer;  {массив индексов}
 vec_key=array[1..maxn] of string;   {массив ключей}
 
 sort_vec=record  {запись sort_vec}
  ind:vec_ind;
  key:vec_key;
  end;
 
 
procedure read_zap(var xmas:vec_mas;var   k:integer);{процедура чтения записей из файла}
 var
  f:text;          {текстовая переменная}
 
 begin
  assign(f,fname); {привязка внешнего файла с данными к внутренней файловой переменной}
  reset(f);        {окрытие файла в режиме чтения}
  k:=0;
 
  while (not EOF(f)) and (k<maxn) do  {считываем записи до конца файла или до максимального числа записей}
  begin
   k:=k+1;                              {счетчик количества записей}
   read(f,xmas[k].time);                {считываем время посадки}
   read(f,xmas[k].marka);               { считываем марку ЛА}
   read(f,xmas[k].bort);                {считываем бортовой номер}
   readln(f,xmas[k].punkt_otpravlenya); {считываем пункт отправления}
 
 
  if k=maxn then {если в файле больше 20 записей,то вывод сообщения}
    begin
    writeln('Исходный файл переполнен! Действия будут произведены с первыми ',maxn,' записями.');{вывод сообщения}
    readln;
    end;
end;
 
end;{конец процедуры чтения записей из файла}
 
procedure proverka_bort(xmas:vec_mas;k: integer);  {функция проверки корректности бортового номера}
var
  i,j:integer;       {переменные цикла}
  temp:integer;      {числовая переменная}
  code:integer;      {позиция первого недопустимого символа}
begin
   {проверка на уникальность бортового номера}
   for i:=1 to k do
   begin
   for j:=1 to k do
   begin
    if (xmas[i].bort=xmas[j].bort) and (i<>j) then
    begin
         writeln('Бортовой номер записей ',i,' и ',j,' совпадает!');
         readln;
         halt;
       end;
   end;
   end;
   {проверка на правильность ввода бортового номера}
   for i:=1 to k do
     begin
     val(copy(xmas[i].bort,4,4),temp,code); {  функция,преобразующая строковую запись в числовое представление}
      {если последние 4 символа бортового номера не цифры,если первый символ бортового номера  не буква,
       а второй символ не тире,то то вывод сообщения об ошибке ввода}
     if (code<>0) or (temp>9999) or (temp<0) or
     (ord(xmas[i].bort[2])<65) or (ord(xmas[i].bort[2])>90) or  {перевод символа в код ASCII}
     (xmas[i].bort[3]<>'-') then
     begin
     writeln('Hеправильно введен бортовой номер записи ',i);
     readln;
     halt;
     end;
    end;
 
end;  {конец процедуры proverka_bort}
 
procedure proverka_punkta( xmas:vec_mas;k:integer);  {процедура проверки уникальности пункта отпарвления}
var i,j:integer;   {переменный циклов}
 
begin
for i:=1 to k do
  begin
     for j:=1 to k do
 
      if (xmas[i].punkt_otpravlenya=xmas[j].punkt_otpravlenya) and (i<>j) then {проверка на уникальность пункта отправления}
      begin
          writeln('Пункт отправления записей ',i,' и ', j  ,' совпадает!');
          readln;
         halt;
      end;
  end;
 
 
end;{конец процедуры proverka_punkta}
 
procedure proverka_vremya(xmas:vec_mas; k: integer ); {процедура входного контроля времени}
var temp1,temp2,code:integer; {переменные для часов и минут и позиции первого недопустимого символа}
    i:integer;  {переменная цикла}
begin
      for i:=1 to k do
        begin
         val(copy(xmas[i].time,1,2),temp1,code); {переменной temp1 присваиваем значение часов}
         val(copy(xmas[i].time,4,2),temp2,code); {переменной temp2 присваиваем значение минут}
 
     if (temp1<0) or (temp1>23) then   {проверяем правильность ввода часов}
     begin
     writeln('В записи ', i, ' неправильно заданы часы');
      readln;
         halt;
     End
         else
          if (temp2<0) or (temp2>59) then  {проверяем правильность ввода минут}
     begin
     writeln('В записи ', i, ' неправильно заданы минуты');
      readln;
         halt;
     End;
     end;
 
end;{конец процедуры proverka_vremya}
 
 
procedure  sortirovka( xmas:vec_mas; var rec:sort_vec;k:integer); {процедура сортировки}
 var
  i,j,tempn:integer;
  tempg:string; {строковая переменная}
  begin
   for i:=1 to k do
    with rec do  {присоединение массива индексов и ключей}
      key[i]:=(xmas[i].time); {присваиваем  key поочередно записи времени}
   for i:=2 to k do
    begin
     with rec do {присоединение массива индексов и ключей}
      begin
       {копия очередного неотсортированного элемента}
       tempg:=key[i];
       tempn:=ind[i];
       {поиск позиции места вставки}
       j:=i-1;
       while (tempg<key[j]) and (j>0) do
        begin
        {сдвиг элементов вправо для освобождения позиции}
         key[j+1]:=key[j];
         ind[j+1]:=ind[j];
         j:=j-1;
        end;
        {вставка элементов}
       key[j+1]:=tempg;
       ind[j+1]:=tempn;
      end;
    end;
end;  {конец процедуры sortirovka }
 
 
 
 
procedure vyvod(xmas:vec_mas;ind:vec_ind;k:integer);  {процедура вывода данных на экран}
 var
  i,j:integer; {переменные циклов}
begin
                             {шапка таблицы}
  writeln(' ______________________________________________________________');
  writeln('|Время посадки | Марка ЛА | Бортовой номер | Пункт отправления |');
  writeln(' ______________________________________________________________');
 
  for i:=1 to k do   {цикл для вывода записей}
   begin
      writeln('|    ',xmas[ind[i]].time:2,'     | ',xmas[ind[i]].marka:8,' |    ',xmas[ind[i]].bort:7,'     |   '
    ,xmas[ind[i]].punkt_otpravlenya); {печать записей в форме таблицы}
      writeln(' _______________________________________________________________');
   end;
end;{конец процедуры vyvod}
 
                        {*****MAIN PROGRAM*****}
var
  kol:integer;   {переменная для количества записей}
  mas:vec_mas;   {переменая для массива}
  rez:sort_vec;  {переменная для массива индекcов и ключей}
  i:integer;     {переменная цикла}
begin
  clrscr;                     {очистка экрана}
  read_zap(mas,kol);          {вызов процедуры}
  clrscr;                     {очистка экрана}
  proverka_vremya(mas, kol ); {вызов процедуры}
  proverka_bort (mas, kol);   {вызов процедуры}
  proverka_punkta( mas,kol);  {вызов процедуры}
 
  for i:=1 to kol do rez.ind[i]:=i;
  writeln('Исходные данные:');
  vyvod(mas,rez.ind,kol);     {вызов процедуры}
 
  sortirovka(mas,rez,kol);    {вызов процедуры}
  readln;
  clrscr; {очистка экрана}
  writeln('Данные после сортировки в порядке возрастания времени посадки:');
  vyvod(mas,rez.ind,kol);     {вызов процедуры}
  readln;
end. {конец программы}
Добавлено через 30 минут 20 секунд
да,исходные данный имеют такой вид

16:45 TU-154M N-1711 Moskva
12:34 AN-123N B-5678 Voroneg
12:49 TU-775K N-5685 Bryansk
15:35 TU-254M V-1340 Tashkent
14:23 AN-123N B-5078 Voroneg
13:02 TU-775K I-7053 Kazan
19:45 AN-183N B-5671 Kaluga
16:45 TU-854M Z-2445 Lipeck
14:23 AN-123N B-5000 Astana
19:45 TU-175K V-1345 Parizh
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
 
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru