Форум программистов, компьютерный форум, киберфорум
Наши страницы
Pascal ABC
Войти
Регистрация
Восстановить пароль
 
Рейтинг 5.00/4: Рейтинг темы: голосов - 4, средняя оценка - 5.00
Alexei B
0 / 0 / 0
Регистрация: 28.05.2011
Сообщений: 1
1

Выполнить сортировку с помощью прямого обмена и вывести данные и результаты на экран

01.06.2011, 08:51. Просмотров 749. Ответов 1
Метки нет (Все метки)

Здравствуйте.
Совсем запутался. 1.Требуется выполнить чтение данных с клавиатуры и из файла с возможностью выбора.2.Выполнить сортировку с помощью прямого обмена и вывести данные и результаты на экран.
Ругается на строку 43. Подозреваю, что неправильно задал тип переменной х. Как сделать так, чтобы оно заработало?
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
uses crt;
const max=20;
type index=1..max;
tablica=record
mes: string[60];
tema_rabot:string[60];
avtor:string[40];
time:string[5];
end;
var diplom:array[index] of tablica;
i:integer; j:integer; x: tablica; f:text;
n:index;
begin
write (' откуда брать данные? ');
read (i);
If i=1 then
 
for i:=1 to n do
with  diplom[i] do
begin
writeln('vvedite kol-vo');readln(n);
writeln('tema ');readln(diplom[i].tema_rabot);
writeln('mesyac ');readln(diplom[i].mes);
writeln('familia ');readln(diplom[i].avtor);
writeln('zatrachenoe vremya ');readln(diplom[i].time);
writeln;
end else
if i=2 then
begin
assign (f, 'd:\1.txt');
reset (f);
for i:=1 to n do
readln (f, diplom[i].tema_rabot);
readln (f, diplom[i].mes);
readln (f, diplom[i].avtor);
readln (f, diplom[i].time);
close(f);
end;
begin
for i:=1 to n do
 for j:=n downto 2 do
 if diplom[j-1].mes>diplom[j].mes then
 x:=diplom[j-1];diplom[j-1]:=diplom[j];diplom[j]:=x;
 end;
 for i:=1 to n do
 write(diplom[i].tema_rabot,'   ',diplom[i].mes,'   ',diplom[i].avtor,'   ',diplom[i].time);
 writeln;
 end.
Добавлено через 52 минуты
неужели ни у кого нет светлых мыслей?

Добавлено через 11 часов 8 минут
помогите пожалуйста
0
QA
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
01.06.2011, 08:51
Ответы с готовыми решениями:

Упорядочить элементы массива по убыванию, используя сортировку с помощью прямого включения
1. Сформировать одномерный массив с помощью генератора случайных чисел. Вывести элементы исходного...

Выполнить сортировку данных с помощью прямого включения
Разработать программу выполняющую следующие действия: 1.чтение данных(из файли или с клавиатуры);...

Сравнить сортировку Шелла и сортировку с помощью прямого включения
Хотел бы узнать как можно написать код который будет сравнивать сортировку Шелла и сортировка с...

Выполнить расчеты и вывести результаты на экран через окно сообщений
В течение 6-ти дней (рабочая неделя) рабочий изготавливает детали 7-ми различных типов. Известно...

Выполнить пузырьковую сортировку массива по возрастанию и вывести исходный массив обработанный на экран
Выполнить пузырьковую сортировку массива по возрастанию и вывести исходный массив обработанный на...

1
Puporev
Модератор
57822 / 44051 / 30419
Регистрация: 18.05.2008
Сообщений: 105,349
01.06.2011, 13:13 2
Для чего у тебя месяц и время строки? Если ты будешь вводить названия месяцев, то и сортировка будет по алфавиту апрель, июнь, июль,..... январь.
Если это так нужно, то тогда нужно все не так писать. Вот по простому.
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
uses crt;
const max=20;
type index=1..max;
tablica=record
        mes: index;
        tema_rabot:string[60];
        avtor:string[40];
        time:index;
        end;
var diplom:array[index] of tablica;
    i:integer; j:integer;
    x: tablica;
    f:text;
    n:index;
begin
clrscr;
write ('ЋвЄг¤* ўў®¤Ёвм ¤***лҐ? 1-б Є«*ўЁ*вгал 2-Ё§ д*©«*');
readln (i);
If i=1 then
 begin
  writeln('vvedite kol-vo');readln(n);
  for j:=1 to n do
   begin
    writeln('Diplom ',j);
    with  diplom[j] do
     begin
      write('tema: ');readln(tema_rabot);
      repeat
      write('mesyac [1..12]: ');readln(mes);
      until mes in [1..12];
      write('familia: ');readln(avtor);
      repeat
      write('zatrachenoe vremya [1..10]: ');readln(time);
      until time in [1..10];
    end;
   end;
 end
else
 begin
  assign (f, 'd:\1.txt');
  reset (f);
  n:=1;
  while not eof(f) do
   begin
    readln (f, diplom[n].tema_rabot);
    readln (f, diplom[n].mes);
    readln (f, diplom[n].avtor);
    readln (f, diplom[n].time);
    n:=n+1;
   end;
  close(f);
 end;
for i:=1 to n-1 do
for j:=i+1 to n do
if diplom[i].mes>diplom[j].mes then
 begin
  x:=diplom[i];
  diplom[i]:=diplom[j];
  diplom[j]:=x;
 end;
for i:=1 to n do
writeln(diplom[i].tema_rabot,'   ',diplom[i].mes,'   ',diplom[i].avtor,'   ',diplom[i].time);
readln
end.
1
Answers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
01.06.2011, 13:13

В одномерном массиве с помощью прямого обмена сортировать четные элементы
В одномерном массиве с помощью прямого обмена сортировать четные элементы. В общем, эта программа...

Выполнить сортировку одномерного массива по возрастанию методом простого обмена
Выполнить сортировку одномерного массива по возрастанию методом простого обмена

Требуется скопировать данные из одного файла в другой, но в обратном порядке. Вывести на экран все результаты
Задание: Требуется скопировать данные из одного файла в другой, но в обратном порядке. Вывести на...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
2
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2019, vBulletin Solutions, Inc.