Форум программистов, компьютерный форум, киберфорум
Turbo Pascal
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
Другие темы раздела
Turbo Pascal В строке введенных символов подсчитать количество символов C,D,Р https://www.cyberforum.ru/ turbo-pascal/ thread235785.html
Помогите пожалуйста. В строке введенных символов подсчитать количество символов C,D,Р, считая концом ввода символ (*). У меня получилась программа, при условии если вводить по одному символу. А вот в строке он считает только первый введенный символ.
Квадратное уравнение Turbo Pascal
Помогите пожалуйста решить задачу, буду оч благодарен: Написать программу для решения квадратного уравнения. Программа должна выполнять проверку введенных данных и, в случае, когда коэффициент при х^2 будет равным 0, выводить сообщение об ошибке и предоставлять возможность ввести значение заново. Результат работы программы вывести с точностью до 2 знаков после запятой. Входные данные. ...
Turbo Pascal отладить цикл https://www.cyberforum.ru/ turbo-pascal/ thread235745.html
Задан одномерный массив целых чисел нужно подсчитать максимальное кол-во нулей подряд у меня в коде он считает только первую группу нулей подскажите где ошибка ? program vector; var i,s,z:integer; massiv: array of integer; begin for i:=1 to 10 do begin writeln('vvedite elementi massiva');
Turbo Pascal Вывести самую длинную строку из каждой тройки строк Помогите решить задачу в Паскале (экзамена) дано объявление строк символов .var s1,s2,s3 : string. из внешнего файла оператором readln (f.s1,s2,s3) вводится любое количество таких данных . вывести самую длинную строку из каждой тройки строк. а там нужно соображать быстро. . https://www.cyberforum.ru/ turbo-pascal/ thread235742.html
Сортировка элементов массива и вывод результата в файл Turbo Pascal
Дан массив целых чисел, состоящий из четырёх элементов. Элементы этого массива циклически перемещаются по следующему правилу: каждый элемент, за исключением начального элемента перемещается в предыдущий по порядку (меньший по индексу) элемент массива, при этом начальный элемент массива перемещается в последний элемент массива. Выполните указанное количество таких перемещений элементов. В качестве...
Turbo Pascal Вывод столицы по названию страны rogram stran; const strana:array of string=('Avstria','Bolgariya','Greciya', 'Italiya', 'Norvegiya', 'Franciya'); cap:array of string=('Vena', 'Sofia', 'Afini', 'Rim', 'Oslo', 'Parij'); var st,st1:string; i:integer; begin repeat writeln('vvedite Stranu'); readln(st); https://www.cyberforum.ru/ turbo-pascal/ thread235730.html
Turbo Pascal Текстовые файлы: Собрать все страницы по порядку в одном файле Даны файлы, созданные в текстовом редакторе Блокнот. В файле 1 записаны нечётные страницы книги, в файле2- чётные страницы. Собрать все страницы по порядку в одном файле.Количество строк во всех файлах одинаково и равно S. https://www.cyberforum.ru/ turbo-pascal/ thread235706.html Turbo Pascal Добавление, удаление записей
Некорректно удалением записей. Как сделать ее корректной? Кол-во записей выставлено 3, потом можно добавить только 1 запись, т.к. стоит лимит на 4 записи. Как сделать возможность добавления любого кол-ва записей? uses crt; const n=4; type mail=record zip,house,apartment,value:integer; place,street,destination:string; end; var a:array of mail;
Turbo Pascal Дана матрица nxm Найти наибольший и наименьший элемент в каждой строке.. https://www.cyberforum.ru/ turbo-pascal/ thread235663.html
Дана матрица nxm Найти наибольший и наименьший элемент в каждой строке..Отсортировать эти максимумы по убыванию в матрицеб а минимумы по возрастаниюю. указать какое количество максимальных и минимальных элементов находица в каждом столбце. var a:array of integer; amin,amax,kolmax,kolmin:array of integer; n,m,j,i,min,max,p,k,x,z :integer; f:boolean; begin write('Vvedite kol-vo strok=');...
Turbo Pascal ввод из файла всем доброго времени суток.. есть вопрос... можно ли из таблицы Амельченко Гомель Победы 35 95 Тарасов Гомель Минская 128 256 Командирова Брест Лесная 12 65 ввести данные поэлементно, или все нужно распределять таким образом.. https://www.cyberforum.ru/ turbo-pascal/ thread235662.html
Turbo Pascal Найти наименьший отрицательный элемент выше побочной диагонали и наименьший положительный элемент ниже побочной диагонали
3)Дан двухмерный массив.Найти наименьший отрицательный элемент выше побочной диагонали и наименьший положительный элемент ниже побочной диагонали с указанием их индексов.Создать новый массив,в котором найденные элементы поменяюца местами. program progr3; uses crt; var n,i,j,imnv,jmnv,imnn,jmnn:byte; a,b:array of integer; Begin clrscr; writeln('Vvedite razmernost'); readln(n);...
Turbo Pascal В матрице А(n,n) найти максимальный элемент каждого столбца и заменить его элементом находящимся на побочной диаганали в этом же столбце https://www.cyberforum.ru/ turbo-pascal/ thread235657.html
Всем привет. Помогите написать код. Задача следующаяя: В матрице А(n,n) найти максимальный элемент каждого столбца и заменить его элементом, находящимся на побочной диагонали в этом же с
0 / 0 / 0
Регистрация: 04.04.2010
Сообщений: 63
0

Сортировка последовательности целых чисел методом прямого слияния и методом цифровой сортировки - Turbo Pascal - Ответ 1328066

30.01.2011, 17:46. Показов 2947. Ответов 3
Метки (Все метки)

Author24 — интернет-сервис помощи студентам
Задание звучит вот так:
1.Разработать процедуры сортировки последовательности целых чисел методом прямого слияния и методом цифровой сортировки (язык программирования Паскаль или Си).
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
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
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
program Slip;
uses
  crt;
type
ptr=^tptr;
Tptr=record
  name:integer;
  next:ptr;
end;
var
N:integer;
procedure PrintMas(pos:ptr);           {вывод на экран}
begin
while pos<>nil do
begin
  write(pos^.naME:8);
  pos:=pos^.next;
end;
end;
 
function CreateMas(N:integer):ptr;      {создание массива}
var
  p:ptr;
  i:integer;
begin
randomize;
new(p);
CreateMas:=p;
p^.name:=random(90)+10;
for i:=2 to N do
  begin
    new(p^.next);
    p:=p^.next;
    p^.name:=random(90)+10;
  end;
  p^.next:=nil;
end;
{деление массива на две части с чередованием по N элементов}
procedure DelMasAsN(S:ptr;var a,b:ptr;N:integer);
var
  I:integer;
  f:boolean;
  a1,b1,a2,b2,s1:ptr;
begin
new(a);
new(b);
a1:=a;
b1:=b;
s1:=s;
f:=false;
i:=-1;
while s<>nil do
  begin
  inc(i);
  if (i mod N)=0 then
    if f then f:=false
    else f:=true;
 
  if f then
    begin
    {a массив}
      a1^.name:=s^.name;
      new(a1^.next);
      a2:=a1;
      a1:=a1^.next;
    end
  else
    begin
    {b массив}
      b1^.name:=s^.name;
      new(b1^.next);
      b2:=b1;
      b1:=b1^.next;
    end;
    s:=s^.next;
  end;
Dispose(a1);
Dispose(b1);
a1:=a2;
b1:=b2;
a1^.next:=nil;
b1^.next:=nil;
s:=s1;
while s1<>nil do
  begin
    s:=s1^.next;
    Dispose(s1);
    s1:=s;
  end;
end;
 
function LenMas(s:ptr):integer; {длина массива}
var
  I:integer;
begin
i:=0;
  while (s<>nil) do
  begin
    inc(i);
    s:=s^.next;
  end;
LenMas:=i;
end;
 
procedure SlipMas(a,b:ptr;var C:ptr);   {слияние массива}
var
  q,r:integer;
  c1,c2:ptr;
begin
  c:=nil;
  if (a=nil) and (b=nil) then exit;
  q:=LenMas(a);
  r:=LenMas(b);
  new(c);
  c1:=c;
  while ((q<>0) and (r<>0)) do
    begin
      if (a^.name<=b^.name) then
        begin
          c1^.name:=a^.name;
          a:=a^.next;
          q:=q-1;
        end
      else
        begin
          c1^.name:=b^.name;
          b:=b^.next;
          r:=r-1;
        end;
      new(c1^.next);
      c2:=c1;
      c1:=c1^.next;
    end;
  while q>0 do
    begin
      c1^.name:=a^.name;
      a:=a^.next;
      q:=q-1;
      new(c1^.next);
      c2:=c1;
      c1:=c1^.next;
    end;
  while r>0 do
    begin
      c1^.name:=b^.name;
      b:=b^.next;
      r:=r-1;
      new(c1^.next);
      c2:=c1;
      c1:=c1^.next;
    end;
  Dispose(c1);
  c1:=c2;
  c1^.next:=nil;
end;
{копирование части массива из S массива с i-го символа длинной count}
function CopyMas(S:ptr;i,count:integer):ptr;
var
  p,p1:ptr;
  l,j,k:integer;
begin
CopyMas:=nil;
if LenMas(S)<i then exit;
new(p);
Copymas:=p;
j:=0;
k:=0;
while s<>nil do
  begin
    inc(j);
    if j>=i then
      begin
        inc(k);
        if (k<=count) then
          begin
            p^.name:=s^.name;
            new(p^.next);
            p1:=p;
            p:=p^.next;
          end;
      end;
    s:=s^.next;
  end;
  Dispose(p);
  p:=p1;
  p^.next:=nil;
end;
 
procedure DestroyMas(S:ptr);  {разрушение массива}
var
 S1:ptr;
begin
s1:=s;
while s1<>nil do
  begin
    s:=s1^.next;
    Dispose(s1);
    s1:=s;
  end;
end;
  {яЁюуЁрььр ёыш*эш}
 
procedure Exempel(S:ptr; var C:ptr);
var
  L,n,i,x:integer;
  a,b,a0,b0,a1,b1,c0,c1,ax,bx,ahead,bhead:ptr;
begin
  L:=LenMas(S);           {определяю длинну}
  DelMasAsN(S,a,b,1);     {делю пополам с чередованием 1}
  printMas(a);
  writeln;
  printMas(b);
  writeln;
  writeln;
  n:=1;
while (L>=2*n) do        {цикл определяет число итераций}
begin
  i:=1;
  while (L div 2)>=i do   {цикл формирования массивов с0 и с1  }
  begin
    a0:=CopyMas(a,i,n);   {копирую из массива элементы с очередностью n в a0}
    b0:=CopyMas(b,i,n);
    SlipMas(a0,b0,c0);    {сливаю эти элементы}
    DestroyMas(a0);       {роазрушаю ненужные массивы}
    DestroyMas(b0);
    i:=i+n;               {закончено формирование части элементов массива с0}
    a1:=CopyMas(a,i,n);
    b1:=CopyMas(b,i,n);
    SlipMas(a1,b1,c1);
    DestroyMas(a1);
    DestroyMas(b1);       {закончено формирование части элементов массива с1 }
    if i=(1+n) then       {слияние всех кусочков массива с1 и с0 }
      begin
        ahead:=c0;
        bhead:=c1;
        while c0^.next<>nil do c0:=c0^.next;
        while c1^.next<>nil do c1:=c1^.next;
        ax:=c0;
        bx:=c1;
        ax^.next:=nil;
        bx^.next:=nil;
      end
    else
      begin
        ax^.next:=c0;
        bx^.next:=c1;
        while ax^.next<>nil do ax:=ax^.next;
        while bx^.next<>nil do bx:=bx^.next;
        ax^.next:=nil;
        bx^.next:=nil;
      end;
    i:=i+n;
  end;
  DestroyMas(a);
  DestroyMas(b);
  a:=ahead;
  b:=bhead;
  printMas(a);    {вывод результата итерации}
  writeln;
  printMas(b);
  writeln;
  writeln;
  n:=2*n;
end;
  SlipMas(a,b,c);  {слияние оконечного результата}
end;
 
var
  head,mas:ptr;
begin
clrscr;
write('                    Введите количество элементов в массиве= ');
readln(N);
head:=CreateMas(N); {создаю массив элементов}
printmas(head);      {выважу на экран}
writeln;
Exempel(head,mas);   {сортирую}
printmas(mas);       {вывод конечного результата}
readln;
end.
Цифровая сортировка
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
program Digital;
 
uses
 crt,dos;
type
ptr=^tptr;
tptr=record
  Name:integer;
  next:ptr;
end;
var
NN:integer;
 
procedure PrintMas(pos:ptr);       {вывод элементов}
begin
while pos<>nil do
begin
  write(pos^.name:8);
  pos:=pos^.next;
end;
end;
 
function CreateMas(N:integer):ptr;      {создаю массив элементов}
var
  p:ptr;
  i:integer;
begin
randomize;
new(p);
CreateMas:=p;
p^.name:=random(90)+10;
for i:=2 to N do
  begin
    new(p^.next);
    p:=p^.next;
    p^.name:=random(90)+10;
  end;
  p^.next:=nil;
end;
 
Function IntToStr(I:integer):String;
{ Преобразовывает значение типа Integer в String }
Var S:String[10];
Begin
 Str(I,S);
 IntToStr:=S;
End;
 
Function Strtoint(S:string):integer ;
 {Преобразовывает значение типа String в integer }
Var E,L:integer;
Begin
E:=0;
 val(s,L,E);
{  if E<>0 then  }
 strtoint:=L;
End;
 
function infoMas(pos:ptr;var Count:integer;const index:integer):integer;
{определяет порядок элементов в массиве и их систему счисления}
var
  S:ptr;
x, L,L1:integer;
 name:string;
begin
{index:=1;}
  S:=pos;
  Count:=0;
  while S<>nil do
  begin
    name:=inttostr(S^.Name);
    L:=length(Name);
    if L>Count then Count:=L;
    S:=S^.next;
  end;
  S:=pos;
  L1:=0;
  while S<>nil do
  begin
    name:=inttostr(S^.Name);
    L:=length(Name);
    if count>=index then
      if L>=index then
        begin
         L:=strtoint(name[L+1-index]); 
          if L>=L1 then
        L1:=L;
        end;
    S:=S^.next;
  end;
  infomas:=L1;
end;
 
procedure DestroyMas(S:ptr);  {уничтожение всех элементов массива}
var
 S1:ptr;
begin
s1:=s;
while s1<>nil do
  begin
    s:=s1^.next;
    Dispose(s1);
    s1:=s;
  end;
end;
 
function digitMas(pos:ptr; index,digit:integer):ptr;
{процедура формирования массива по двум параметрам: }
{ dijit -системы счисленияш* index - параметр элемента}
var
  p,a,a1,heada:ptr;
  name:string;
  L:integer;
begin
  a1:=nil;
  p:=pos;
  new(heada);
  a:=heada;
  while p<>nil do
  begin
    Name:=inttostr(p^.name);
    L:=length(Name);
    if L>=index then
      begin
        if {strtoint}(name[l+1-index])=inttostr(digit) then
          begin
            a^.Name:=p^.Name;
            new(a^.next);
            a1:=a;
            a:=a^.next;
          end;
      end
    else
      if digit=0 then
      begin
        a^.Name:=p^.Name;
        new(a^.next);
        a1:=a;
        a:=a^.next;
      end;
    p:=p^.next;
  end;
  Dispose(A);
  a:=a1;
  DigitMas:=heada;
  if a<>nil then a^.next:=nil
  else DigitMas:=nil;
end;
 
var
  Head,p:ptr;
  a:string;
 b, L,k,i,j,n:integer;
  HeadMas:array[0..256] of ptr;
  begin
  clrscr;
   writeln;
   write('                 Введите количество элементов в массиве= ' );
  readln(NN);
  clrscr;
    head:=CreateMas(NN); {создаю массив}
      PrintMas(head);      {отображаю его}
      InfoMas(head,L,i);     {определяю число символов в элементе массива }
  for i:=1 to L do         {цикл прогонки по порядку цифр}
  begin
    k:=InfoMas(head,L,i);  {определяю систему счисления у i-ых символов}
    for j:=0 to k do       {цикл прогонки по системе счисления}
    begin
      HeadMas[j]:=digitMas(head,i,j); {создает массив из i-го порядка и
                                         j-ой системы счисления *}
      write('Q',j,':');
      PrintMas(HeadMas[j]);
      writeln;
    end;
    DestroyMas(head);        {разрушаю массив}
      for n:=0 to (k) do  {проверяю на наличие массива в массиве заголовк в Headmas}
    begin
      if HeadMas[n]<>nil then break;
    end;
    head:=HeadMas[n];     {устанавливаю n-й заголовок}
    p:=HeadMas[n];
    if p<>nil then                         {прогоняюмассив вконец}
    while p^.next<>nil do p:=p^.next;
    for j:=n to k do                    {формирую массив}
    begin
      p^.next:=headMas[j+1];
      if p<>nil then
      while p^.next<>nil do p:=p^.next;
    end;
    printmas(head); {вывод массива}
  end;
  readln;
end.
Добавлено через 9 часов 11 минут
Неужели никто не поможет?

Вернуться к обсуждению:
Сортировка последовательности целых чисел методом прямого слияния и методом цифровой сортировки Turbo Pascal
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
30.01.2011, 17:46
Готовые ответы и решения:

Сортировка методом прямого слияния
Помогите,отсортировать строки текстового файла в алфавитном порядке методом прямого слияния ...

Сортировка массива методом прямого выбора и методом прямого обмена (пузырьковая)
Сортировка в Delphi массива из 6 двухзначных чисел. Методом прямого выбора и методом прямого...

Сортировка одномерного массива целых чисел по возрастанию методом быстрой сортировки
Написать программу для сортировки одномерного массива целых чисел по возрастанию методом быстрой...

Сортировка методом прямого включения ( исправление метода сортировки )
Условие: Сгенерируйте случайным образом 20 целых чисел и поместите их в типизированный файл. ...

3
30.01.2011, 17:46
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
30.01.2011, 17:46
Помогаю со студенческими работами здесь

Исследование алгоритмов сортировки методом прямого включения и методом Шелла
Здравствуйте. Мне нужно написать программу в C# на тему &quot;Исследование алгоритмов сортировки методом...

Сортировки массива методом пузырька и методом прямого включения
сортировки массива методом пузырька и методом прямого включения Очень срочно надо помогите плис

Cортировка методом прямого слияния
сортировка методом прямого слияния

Ускоренная сортировка методом пузырька и методом слияния
Друзья помогите. Условие задачи: Составить две программу, которые реализуют алгоритм ускоренной...

Сортировка чисел методом прямого выбора и пузырька
Надо отсортировать цисла массива с рандомом что бы положительное число росло, а отрицательное число...

Сортировка последовательности методом быстрой сортировки
помогите :Написати програму для сортування послідовності 45 37 2 5 9 12 6 4 52 методом швидкого...

0
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru