Здравствуйте ,проблема вот в чём:я никогда раньше не сталкивался с написанием больше ,чем одной процедуры в модуле.
Сейчас мне это пришлось и возникает ошибка,которую я пока не знаю как исправить
Вот код
читать дальше
unit SORT;
interface
Type
STR = array of string [50];
Procedure SORT_Bubble(Mas:STR) ;
implementation
Uses SysUtils;
Procedure Sort_Bubble;
Var
FL:boolean;
i:byte;
k:word;
x:string[50];
l:integer;
n:integer ;
begin
n:=0;
For i:=1 to 100 do
If Mas[i]<>'' then
n:=n+1;
k:=0;
Fl:=false;
l:=2;
repeat
For i:= n downto l do
begin
If Mas[i-1] > Mas[i] then
begin
k:=k+1;
x:=Mas[i-1];
Mas[i-1]:=Mas[i];
Mas[i]:=x;
end;
end;
If k=0 then
Fl:=true;
l:=l+1;
k:=0;
until(FL=true);
end;
Procedure Sort_Shaker(Mas:STR);
implementation
Uses SysUtils,
Procedure Sort_Shaker;
Var
i,j:byte;
max,min:byte;
Mas:array of string[50];
k:string[50];
n:integer ;
begin
n:=0;
For i:=1 to 100 do
If Mas[i]<>'' then
n:=n+1;
For i:=1 to (n div 2) do
begin
min:=i;max:=n-i+1;
For j:=i to (n-i+1) do
begin
If Mas[j]>Mas[max] then
max:=j;
If Mas[j]<Mas[min] then
min:=j;
end;
If (max=min) then break;
If (max = i) then
begin
K:=Mas[min];
Mas[min]:=Mas[i];
Mas[i]:=K;
max:=min;
K:=Mas[max];
Mas[max]:=Mas[n-i+1];
Mas[n-i+1]:=K;
end
else
begin
K:=Mas[min];
Mas[min]:=Mas[i];
Mas[i]:=K;
K:=Mas[max];
Mas[max]:=Mas[n-i+1];
Mas[n-i+1]:=K;
end ;
end;
end.
Ошибка возникает следующая:
[Error] SORT.dpr(63): ';' expected but 'IMPLEMENTATION' found(То есть связанная со вторым Implementation)
Заранее спасибо.
-
-
02.05.2010 в 00:45Перенеси объяление второй фанки наверх. Саму фанку внизу оставь без implementation.
А перед тем как что-то делать - лучше всего почитать про DRY.
-
-
02.05.2010 в 00:52Не совсем понял о чём статья...
-
-
02.05.2010 в 01:00Так, структура модуля:
unit <Имя>
interface
<Тут идет список глобальных переменных и описаний функций>
implementation
<Тут идет реализация функций, описанных в интерфейсе>
-
-
02.05.2010 в 01:04-
-
02.05.2010 в 01:04-
-
02.05.2010 в 01:07В процедуре Sort_Shaker переменная Mas это и параметр и локальная переменная. Переименуйте одну из них.
Procedure Sort_Shaker(Mas:STR);
...
Procedure Sort_Shaker;
Var
i,j:byte;
max,min:byte;
Mas:array of string[50];
-
-
02.05.2010 в 01:10Тигр Насчёт статьи:да,когда код повторяется это конечно плохо,но я как-то этого не смог избежать,просто только начинающий а этом деле.
-
-
02.05.2010 в 02:28К примеру вот так: Function Binary_Search(M:string,Mas:array of string):integer;
У меня просто две переменных,которые надо передать : строку для поиска,и массив строк,среди которых надо искать эту строку.
-
-
02.05.2010 в 02:57-
-
02.05.2010 в 09:44Параметры в паскале разделяются точкой с запятой:
Function Binary_Search(M:string; Mas:array of string):integer;
-
-
02.05.2010 в 10:01Идея хорошая. Тег “code” в дневниках не выделяет синтаксис, и само окно выглядит неудобно. Идеальным вариантом было бы поместить куда-нибудь код и скопировать его вместе с подсветкой сюда.
Я помещу объявление об этом сайте в эпиграф.
-
-
02.05.2010 в 12:59Unit ...
Interface
Uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs,SysUtils,
SORT in 'D:\Module 1\SORT.pas' ,//Вот здесь выскакивает ошибка
Search in 'D:\Module 2\Search.pas';//И здесь тоже
-
-
02.05.2010 в 13:36Чтобы к проекту на Delphi7 добавить какой-нибудь модуль, используйте пункт меню: project->add to project. В диалоге выберите модуль. После этого путь к нему автоматически пропишется в файле проекта. Потом можно будет включать этот модуль в uses других модулей.
-
-
02.05.2010 в 13:51-
-
02.05.2010 в 16:11Вызываю следующую процедуру : SORT_Bubble( String_Mas ; L);//И здесь у меня пишется что-то типа несовместимые данные
В описании самой процедуру 1-ая переменная это это массив строк Mas ,2-ая N - число строк.В Mas передаётся String_Mas (String_Mas это так же массив строк),а
в L должно передаваться такое же значение N(L и N оба типа integer).Никак не могу понять в чём это несовместимость данных.Но компилятор по-моему именно конфликтует с 1-ой переменной,но почему...Может быть потому что,что и Mas и String_Mas : STR ...Заранее благодарен.Просто все эти трудности возникают из-за того,что я захотел написать программу в оконном режиме,а не в консольном,как раньше и этому нас не учили.
-
-
02.05.2010 в 16:16Когда вызываете процедуры, передаваемые им фактические параметры нужно разделять запятой:
SORT_Bubble( String_Mas , L);
-
-
02.05.2010 в 16:21-
-
02.05.2010 в 16:41Напишите сюда код: заголовок функции, как ее вызываете и как объявляете переменные, которые будут использоваться в качестве параметров. Может быть вы объявили процедуру в секции interface с другим набором параметров, или один из массивов имеет не тип STR, а array of string[50]?
-
-
02.05.2010 в 16:44например array[1..10] of integer и array[1..10] of integer для паскаля -- разные типы.
Во избежание это нужно сделать так: type TMyArray = array[1..10] of integer;
-
-
02.05.2010 в 16:49=============
Var
String_Mas:STR
L:integer;
begin
SORT_Bubble( String_Mas , L);
end;
==================
Описание процедуры:
Procedure Sort_Bubble(Mas:STR;n:integer);
Var
---------
begin
<тело подпрограммы>
end;
//STR У меня объяявлен только в подпрограмме (Type STR=array of string[50]),и мне показалось раз я его подключил,то
в основном модуле я уже не указывал тип STR.
-
-
02.05.2010 в 16:56-
-
02.05.2010 в 17:02-
-
02.05.2010 в 17:02Это правильно.
По коду не пойму где ошибка... Вот два модуля, которые компилируются без ошибки: http://paste.org.ru/?eiekwz
Если по этому примеру не поймете - что не так, скиньте так же ваши модули.
Все же мне кажется, что у формального и фактического параметра массива разные типы. Нажмите на тип каждого из них правой кнопкой мыши и выберите find declaration. Должно указывать на одну и ту же строчку одного и того же модуля.
-
-
02.05.2010 в 17:20