Форум программистов, компьютерный форум, киберфорум
Delphi для начинающих
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.50/4: Рейтинг темы: голосов - 4, средняя оценка - 4.50
0 / 0 / 0
Регистрация: 03.02.2012
Сообщений: 49
1

объявление функции как массива

20.05.2012, 15:46. Показов 801. Ответов 4
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
помогите пожалуйста разобраться, пишу прогу, в которой нужно сформировать несколько массивов разного размера по данным из файлов. Интересующая меня задача заключена в следующем примере:

на форме кнопка. два юнита.

первый:
Delphi
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
unit Unit1;
 
interface
 
uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls;
 
type
  mas=array of string;
  TForm1 = class(TForm)
    btn1: TButton;
    procedure btn1Click(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;
 
var
  Form1: TForm1;
 
implementation
uses Unit2;
 
var
  A, B: mas;
 
{$R *.dfm}
 
procedure TForm1.btn1Click(Sender: TObject);
begin
 A:=formation('A.txt');
 B:=formation('B.txt');
 ShowMessage(B[0]);
end;
 
 
end.
второй:
Delphi
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
unit Unit2;
 
interface
uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs;
 
type
  mas=array of string;
 
  function formation(way: string): mas;
 
implementation
uses Unit1;
 
function formation(way: string): mas;
var
 tfile: TextFile;
 i: Integer;
begin
 i:=0;
 AssignFile(tfile, way);
 reset(tfile);
 while not Eof(tfile) do begin
  Readln(tfile, result[i]);
  inc(i);
 end;
 CloseFile(tfile);
end;
 
end.
объявление глобальных переменных и создание второго юнита нужны для того, чтобы максимально приблизить пример к оригиналу.

Выдает ошибку несовместимости типов в строке обращения к функции. Что не так?
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
20.05.2012, 15:46
Ответы с готовыми решениями:

Объявление двухмерного динамического массива в функции
Подскажите, как объявить динамический массив размерности n*n. Допустим есть функция void F1(...,...

Объявление функции как аргумента
Как объявить функции в качестве аргумента в другой функции?

Как разделить объявление массива контролов и его инициализацию конкретными компонентами
Всем здравствуйте. Такое объявление совмещённое с инициализацией успешно работает в конструкторе...

Объявление и определение глобального массива структур. Доступ к нему из любого cpp. Как?
Вот такая тема. Есть файл BazaOfProgram.h...

4
Супер-модератор
Эксперт Pascal/DelphiАвтор FAQ
32835 / 21172 / 8148
Регистрация: 22.10.2011
Сообщений: 36,431
Записей в блоге: 8
20.05.2012, 15:51 2
Формально - тип mas, описанный в Unit2 и тип mas, описанный в Unit1 - разные типы, хоть и записываются совершенно одинаково. Поэтому компилятор подобную конструкцию не пропустит (и правильно делает). Перенеси подключение Unit2 в интерфейсную часть первого модуля, и убери в первом модуле описание типа mas. Тогда все начнет работать.
1
0 / 0 / 0
Регистрация: 03.02.2012
Сообщений: 49
20.05.2012, 16:19  [ТС] 3
ок, теперь другая проблема. программа запускается но при попытке считывания из файла, выдает ошибку, ".......... read of adress 0000000".

текстовые файлы созданы правильно
0
Супер-модератор
Эксперт Pascal/DelphiАвтор FAQ
32835 / 21172 / 8148
Регистрация: 22.10.2011
Сообщений: 36,431
Записей в блоге: 8
20.05.2012, 16:27 4
У тебя нет выделения памяти под array of String. Перед тем, как читать в result[ i ] сделай

Delphi
1
SetLength(Result, Length(Result) + 1);
, или не занимайся глупостью, не читай файл построчно, а прочти его в StringList, сразу установи требуемую длину массива и перенеси содержимое из StringList-а в array of string. Кстати, а почему Array of String, а не тот же TStringList или TStrings?
0
0 / 0 / 0
Регистрация: 03.02.2012
Сообщений: 49
21.05.2012, 12:59  [ТС] 5
Все, понял. Добавил setlenght в подпрограмму перед считыванием строки.

о, значит я чуть раньше догадался, , не работал никогда с динамическими массивами

попробую стринглист. не пробовал раньше, потому что зелен.

Добавлено через 20 часов 29 минут
всё. перепилил программку с помощью stringlist, попутно открыл для себя связку try..except, все работает, спасибо за помощь.
0
21.05.2012, 12:59
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
21.05.2012, 12:59
Помогаю со студенческими работами здесь

Объявление функции внутри функции. Keil4
А можно ли в keil внутри функции объявлять новые? Например так? Раньше я так делал на PIC24, а...

Объявление функции
Что значит подобное объявление: int f() const; Для чего этот "const" ?

Объявление функции
Смотрел видео урок и увидел странное для себя(!) объявление функции, оно имеет следующий вид:...

Объявление функции в C#
Помогите пожалуйста, в коде VBasic прописано: Private Function CropBitmap()(ByVal scrBitmap As...


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

Или воспользуйтесь поиском по форуму:
5
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru