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

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

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль

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

Ответ
 
Опции темы Поиск в этой теме
Старый 04.03.2009, 00:59   #1
SeRhy
Форумчанин
 
Аватар для SeRhy
 
Регистрация: 19.10.2007
Сообщений: 168
По умолчанию Метод прямого слияния. Pascal

У меня есть задание упорядочить масив целых чисел на 30000 елементов методом прямого слияния. Я написал:


PHP код:
Program qqq;

Type mas=array[1..30000of integer;

var 
a:mas;
    
b,c:^mas;

function 
rozlutta(var a:masb,c:mas; var x,y:integer):boolean;
var 
i,g:integer;
begin
b
^[1]:=a[1];
x:=1;
y:=0;
g:=0;
for 
i:=2 to 30000 do
 if 
g=0 then
  
if a[i]>=b^[xthen
   begin
    x
:=x+1;
    
b^[x]:=a[i];
   
end
  
else
   
begin
    y
:=y+1;
    
c^[y]:=a[i];
    
g:=1;
   
end
  
else
   if 
a[i]>=c^[ythen
    begin
     y
:=y+1;
     
c^[y]:=a[i];
    
end
  
else
   
begin
    x
:=x+1;
    
b^[x]:=a[i];
    
g:=0;
   
end;
rozlutta:=y=0;
end;

procedure sort(var a:mas);
var 
k,l,m,x,y:integer
    b
,c:^mas;
begin
 
New(b);
 New(
c);
 While 
not rozlutta(a,b,c,x,y) do
  
begin
   k
:=1;
   
l:=1;
   
m:=1;
   while (
k>=x) and (l<=y) do
    
begin
     
if b^[k]>=c^[lthen
     begin
     a
[m]:=c^[l];
     
l:=l+1;
     
m:=m+1;
     else
     
begin
     a
[m]:=b^[k];
     
k:=k+1;
     
m:=m+1;
     
end;
    if 
k>x then
     
for l:=l to y do
      
begin
       a
[m]:=c^[l];
       
m:=m+1;
      
end
    
else
     for 
k:=k to x do
      
begin
       a
[m]:=b^[k];
       
m:=m+1;
      
end;
   
end;
 
a:=b^;
 
dispose(b);
 
dispose(c);
 
end;

Procedure readmas (var b:masuv);
var 
i:integer;
    
f:text;
Begin
Assign
(f,paramstr(1));
 
Reset(f);
 
i:=1;
  while (
not eof(f)) and (i<=30000) do
   
begin
    readln
(f,b[i]);
     
i:=i+1;
   
end;
 
close(f);
end;

procedure zapus (var b:masuvpor,per:longint);
var 
i:integerf:text;
Begin
 Assign
(f,paramstr(2));
 
Rewrite(f);
 
Writeln(f,por);
 
Writeln(f,per);
 
Writeln(f);
  for 
i:=1 to 30000 do
   
writeln(f,b[i]);
Close(f);
end;

Begin
 
New(b);
 New(
c);
 
Readmas(a);
 
rozlutta(a,b,c);
 
sort(a);
 
Zapus(a,b,c);
end

При попытке компиляции в "b^[1]:=a[1];" сторчке появляется ошибка:
Error 121: Inavalid qualifier

Подскажите пожалуйста в чём проблема. Зарание спасибо
SeRhy вне форума Ответить с цитированием
Старый 04.03.2009, 09:36   #2
cvv
 
Регистрация: 17.01.2009
Сообщений: 6
По умолчанию

...
var a:mas;
b,c:^mas;
...
function rozlutta(var a:mas; b,c:mas; var x,y:integer):boolean;
var i,g:integer;
begin
b^[1]:=a[1];
...

b рассматривается как переменная-параметр типа mas, а не глобальная переменная-указатель типа ^mas
cvv вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Программа для слияния файлов и просчёта суммы Харуми-тян Общие вопросы .NET 9 07.02.2009 17:05
Сортировка массива методом прямого выбора(Дельфи) Onza Помощь студентам 20 25.01.2009 12:05
Как вместо полей слияния сделать поля со списком? dododo Microsoft Office Excel 0 09.11.2008 03:13