00:26

Delphi 7

Здравствуйте ,проблема вот в чём:я никогда раньше не сталкивался с написанием больше ,чем одной процедуры в модуле.
Сейчас мне это пришлось и возникает ошибка,которую я пока не знаю как исправить
Вот код читать дальше

Ошибка возникает следующая:
[Error] SORT.dpr(63): ';' expected but 'IMPLEMENTATION' found(То есть связанная со вторым Implementation)
Заранее спасибо.

@темы: Delphi

Комментарии
02.05.2010 в 00:45

Implementation должен быть один! =)

Перенеси объяление второй фанки наверх. Саму фанку внизу оставь без implementation.

А перед тем как что-то делать - лучше всего почитать про DRY.
02.05.2010 в 00:52

Implementation удалил.А процедуру в 1-ом USES прописывать?
Не совсем понял о чём статья...
02.05.2010 в 01:00

*повис*

Так, структура модуля:

unit <Имя>
interface
<Тут идет список глобальных переменных и описаний функций>
implementation
<Тут идет реализация функций, описанных в интерфейсе>
02.05.2010 в 01:04

Кстати, можно объявить функцию до ее тела и в секции implementation. Для этого нужно использовать ключевое слово forward.

02.05.2010 в 01:04

Ой да,точно,извиняюсь,вспомнил.Правда ошибок теперь вылезло в раза 3 больше)
02.05.2010 в 01:07

Правда ошибок теперь вылезло в раза 3 больше)
В процедуре 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

mr Gray Да,спасибо,уже исправил,работает.
Тигр Насчёт статьи:да,когда код повторяется это конечно плохо,но я как-то этого не смог избежать,просто только начинающий а этом деле.
02.05.2010 в 02:28

Последний вопрос,если можно:Не знаете почему не получается использовать функцию/процедуру ,которая содержит 2 и более переменных разных типов?
К примеру вот так: Function Binary_Search(M:string,Mas:array of string):integer;
У меня просто две переменных,которые надо передать : строку для поиска,и массив строк,среди которых надо искать эту строку.
02.05.2010 в 02:57

Люди никогда не достигнут совершенства, пока будут оставаться людьми...
гаспада, выкладывайте код куда-нибудь типа paste.org.ru/
02.05.2010 в 09:44

Function Binary_Search(M:string,Mas:array of string):integer;
Параметры в паскале разделяются точкой с запятой:
Function Binary_Search(M:string; Mas:array of string):integer;
02.05.2010 в 10:01

[revolver]
Идея хорошая. Тег “code” в дневниках не выделяет синтаксис, и само окно выглядит неудобно. Идеальным вариантом было бы поместить куда-нибудь код и скопировать его вместе с подсветкой сюда.
Я помещу объявление об этом сайте в эпиграф.
02.05.2010 в 12:59

Точно,спасибо.Если я ещё не надоел,можно ещё один вопрос:У меня есть 2 модуля,которые надо подключить к другому модулю.Я знаю как только подключать модули к консольным программам(просто в USES их дописывать и путь указать),там всё работает.А вот если я в модуле то же напишу,то мне выдаётся ошибка.То есть
Unit ...

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

nvse
Чтобы к проекту на Delphi7 добавить какой-нибудь модуль, используйте пункт меню: project->add to project. В диалоге выберите модуль. После этого путь к нему автоматически пропишется в файле проекта. Потом можно будет включать этот модуль в uses других модулей.
02.05.2010 в 13:51

mr Gray ещё раз спасибо,всё заработало.
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);
Когда вызываете процедуры, передаваемые им фактические параметры нужно разделять запятой:
SORT_Bubble( String_Mas , L);
02.05.2010 в 16:21

mr Gray Пробовал,не помогает))Всё равно пишется:[Error] Unit1.pas(42): Incompatible types
02.05.2010 в 16:41

nvse
Напишите сюда код: заголовок функции, как ее вызываете и как объявляете переменные, которые будут использоваться в качестве параметров. Может быть вы объявили процедуру в секции interface с другим набором параметров, или один из массивов имеет не тип STR, а array of string[50]?
02.05.2010 в 16:44

Люди никогда не достигнут совершенства, пока будут оставаться людьми...
mr Gray nvse на всякий случай сразу скажу, что

например 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

Я вот такой эксперимент сделал вместо String_Mas поставил i:byte.Ошибка выдавалась следующая:Несовместимые типы 'STR' и 'byte'.Здесь же просто пишется : Несовместимые типы.
02.05.2010 в 17:02

[revolver] по-моему в качестве TmyArray у меня STR
02.05.2010 в 17:02

STR У меня объяявлен только в подпрограмме
Это правильно.
По коду не пойму где ошибка... Вот два модуля, которые компилируются без ошибки: http://paste.org.ru/?eiekwz
Если по этому примеру не поймете - что не так, скиньте так же ваши модули.

Все же мне кажется, что у формального и фактического параметра массива разные типы. Нажмите на тип каждого из них правой кнопкой мыши и выберите find declaration. Должно указывать на одну и ту же строчку одного и того же модуля.
02.05.2010 в 17:20

mr Gray cпасибо,разобрался.Дело вот в чём было,оказывается:у меня 2 модуля (1-ый для сортировки,2-ой для поиска).У каждого из этих 2-х модулей был одинаковый тип STR.Как только в одном из модулей я его переобозначил,всё стало работать.Видимо,из-за это и был конфликт.