Форум программистов, компьютерный форум, киберфорум
Наши страницы

Lazarus

Войти
Регистрация
Восстановить пароль
 
 
SexyHpexy
0 / 0 / 0
Регистрация: 03.12.2016
Сообщений: 45
Завершенные тесты: 1
#1

Setlength - Lazarus

01.05.2017, 14:59. Просмотров 355. Ответов 17
Метки нет (Все метки)

Помогите пожалуйста сделать программу с setlength

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
uses crt;
type
// a=array[1..500] of integer;
 //b=array[1..500] of word;
 MyArray=array of array of integer;
var amount, n: integer;
   mas: MyArray;
   t,t2:text;
   s:char;
   name,str:string;
 
{--------------------------------------------------------}
 
procedure input (var _t,_t2: text; var _name: string; var _mas: MyArray; var _n:integer);
var name2 :string;
begin
WriteLn('Enter the file name: ');
ReadLn(_name);
assign (_t, _name);
 {$I-}
reset (_t);
   {$I+}
if IOResult <>0 then
begin
 WriteLn('File not found');
 halt;
 end
 else begin
   WriteLn('Found file');
   writeln ('Enter the file name rezultat: ');
   readln(name2);
   assign (_t2,name2);
   {$I-}
   rewrite (_t2);
   {$I+}
 if IOResult<>0 then
 begin
  writeln ('file not found');
  readkey;
  halt;
  end
  else begin
   writeln ('found file');
  end;
end;
end;
{--------------------------------------------------------}
 
procedure obraz (var _t: text; var _amount, _n:integer; var _mas: MyArray; var _str:string);
var
   i:integer;
   k,err:integer;
 
begin
_amount:=0;
 
while not EOF(_t) do
  begin
     read(_t,_str);
 
 for i:=0 to length(_str) do
     begin
       if _str[i] in ['0'..'9'] then
       begin
        inc(_n);
        _mas[_n]:=ord(_str[i]);
       end;
 
     end;
 readln(_t);
 end;
close (_t);
for i:=1 to _n do
begin
 
val(chr(_mas[i]),k,err);
_amount:= _amount+ k ;
end;
end;
 
{--------------------------------------------------------}
 
procedure output (var _t2: text; var _amount, _n: integer);
begin
writeln (_t2,'amount= ',_amount);
writeln (_t2, 'quantity= ',_n);
close (_t2);
Writeln ('The result is calculated');
end;
 
begin
clrscr;
input(t,t2,name,mas,n);
obraz(t,amount,n, mas,str);
output( t2,amount,n);
end.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
01.05.2017, 14:59
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Setlength (Lazarus):

Length и SetLength - Lazarus
Если задать SetLength(a,2); то length(a) будет возвращать 2? Добавлено через 30 минут У меня какой-то из операторов в одной...

Работа с SETLENGTH с параметром-открытым массивом - Lazarus
Помогите пожалуйста переписать программу с SETLENGTH с параметром-открытым массивом. Само задание: Умножить матрицу на заданное число X ...

SetLength работает с динамическим массивом переданым через параметры функции? - Lazarus
есть функция myfunk(var N:Array of integer):boolean; begin SetLength(N,10); end; При вызове пишет что не соотвествие параметров

SetLength & EOutOfMemory - Delphi
Столкнулся с такой проблемой, при заполнении динамического массива данными из xml файла (~6000 записей), получаю OutOfMemory. Чтение...

Как работает SetLength() - Delphi
Вопрос такой: если у меня есть динамический массив dimass на n элементов я заполнил первые mэлементов нужной информацией, потом отсекаю...

Incompatible types в функции SetLength - Delphi
Добрый вечер. У меня в программе есть собственная функция, где применяется функция setlength. На эту функцию выдаёт ошибку &quot;Incompatible...

17
Hretgir
202 / 76 / 2
Регистрация: 25.01.2012
Сообщений: 2,904
Записей в блоге: 21
01.05.2017, 16:00 #2
Ты делай и пиши что не работает. Тогда быстрее помогут.
0
SexyHpexy
0 / 0 / 0
Регистрация: 03.12.2016
Сообщений: 45
Завершенные тесты: 1
01.05.2017, 16:12  [ТС] #3
Hretgir, Я уже несколько дней сижу над этим. И практически всегда ошибка в 66 строке, при чем уже после [i]) и перед ; . И я не могу понять, что не так
0
Hretgir
202 / 76 / 2
Регистрация: 25.01.2012
Сообщений: 2,904
Записей в блоге: 21
01.05.2017, 16:19 #4
Так у тебя массив двухмерный, а записываешь в него как в одномерный. Или я не прав? В строке 66 ты делаешь запись в него как в одномерный массив, а он вроде как двумерный должен быть у тебя.
0
SexyHpexy
0 / 0 / 0
Регистрация: 03.12.2016
Сообщений: 45
Завершенные тесты: 1
01.05.2017, 16:38  [ТС] #5
Hretgir, У меня одномерный массив. В 63 строке я проверяю элементы строки от 1 до конца строки число ли, потом есть новая переменная n - кол-во символов, от 0 до конечного значения. И дальше я в тот же массив перезаписываю элемент, но уже его код, а не его самого. Массив один, перезапись элемента просто
0
Hretgir
202 / 76 / 2
Регистрация: 25.01.2012
Сообщений: 2,904
Записей в блоге: 21
01.05.2017, 16:42 #6
Это Delphi?
Не важно, у тебя тип
Pascal
1
MyArray=array of array of integer;
определён ведь как двумерный массив?
разве одномерный не так определяется
Pascal
1
MyArray=array of integer;
0
SexyHpexy
0 / 0 / 0
Регистрация: 03.12.2016
Сообщений: 45
Завершенные тесты: 1
01.05.2017, 16:45  [ТС] #7
Hretgir, Понял, исправил. Но
0
Миниатюры
Setlength  
volvo
Супер-модератор
Эксперт Pascal/DelphiАвтор FAQ
24804 / 16478 / 5081
Регистрация: 22.10.2011
Сообщений: 29,121
Записей в блоге: 5
01.05.2017, 17:32 #8
Pascal
1
for i:=0 to length(_str) - 1 do
0
SexyHpexy
0 / 0 / 0
Регистрация: 03.12.2016
Сообщений: 45
Завершенные тесты: 1
01.05.2017, 20:46  [ТС] #9
volvo, Все равно та же ошибка, в 66 строке
0
Hretgir
202 / 76 / 2
Регистрация: 25.01.2012
Сообщений: 2,904
Записей в блоге: 21
01.05.2017, 23:46 #10
так ты в массив целочисленных данных строковую переменную пихаешь, да ещё и под видом массива. и чего-бы её не было, это ошибки? хотя это не pascal похоже, я не знаю.
0
edukra
481 / 458 / 142
Регистрация: 24.01.2012
Сообщений: 1,099
02.05.2017, 09:38 #11
1. Не назначен размер массива (в коде нигде нет setlength)
2. Переменная _n не обнуляется перед циклом.
0
SexyHpexy
0 / 0 / 0
Регистрация: 03.12.2016
Сообщений: 45
Завершенные тесты: 1
02.05.2017, 16:10  [ТС] #12
edukra, Я понимаю, что нет нигде setlength, просто именно в этом коде я вообще не пойму куда именно его вставить. _n обнулил. А дальше я так и не врубаюсь в ошибку в 66 строке, точнее ошибку понял, а как исправить нет
0
edukra
481 / 458 / 142
Регистрация: 24.01.2012
Сообщений: 1,099
02.05.2017, 16:46 #13
Так, как заранее неизвестно, какой размер массива, то можно поступить так: перед записью значения в массив - увеличить его на 1 т.е. setlength(_mas,length(_mas)+1); и еще. индекс в динамическом массиве начинается с нуля, поэтому inc(_n); нужно выполнять после записи в массив.
0
KatrinLuxury
12 / 12 / 5
Регистрация: 14.11.2016
Сообщений: 221
02.05.2017, 22:49 #14
edukra, Я тоже попыталась изменить процедуру как вы сказали
Pascal
1
procedure obraz (var _t: text; var _amount, _n:integer; var _mas: MyArray; var _str:string);
Все равно пишет ошибку в строке
Pascal
1
_mas[_n]:=ord(_str[i]);
Вы не могли бы изменить эту процедуру правильно
0
edukra
481 / 458 / 142
Регистрация: 24.01.2012
Сообщений: 1,099
03.05.2017, 09:07 #15
Это с минимальной правкой
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
procedure obraz (var _t: text; var _amount, _n:integer; var _mas: MyArray; var _str:string);
var
   i:integer;
   k,err:integer;
 
begin
_amount:=0;
_n:=0;  // то, о чем я писал
while not EOF(_t) do
  begin
     read(_t,_str);
 
 for i:=1 to length(_str) do
     begin
       if _str[i] in ['0'..'9'] then
       begin
        setlength(_mas,n+1);
        _mas[_n]:=ord(_str[i]);
        inc(_n);
       end;
 
     end;
 readln(_t);
 end;
close (_t);
for i:=0 to _n-1 do //здесь от 0 до _n-1
begin
 
val(chr(_mas[i]),k,err);
_amount:= _amount+ k ;
end;
end;
а вообще, если в задании не было указано использовать массив, то эту процедуру можно сократить
Pascal
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
procedure obraz (var _t: text; var _amount, _n:integer);
var
   i:integer;
   k,err:integer;
   s:string;
begin
  _amount:=0;
  _n:=0;
  while not EOF(_t) do
     begin
     readln(_t,s);
     for i:=1 to length(s) do
     begin
       if s[i] in ['0'..'9'] then
       begin
         _amount:=_amount+ord(s[i])-48;
         inc(_n);
       end;
     end;
   end;
  close (_t);
end;
0
03.05.2017, 09:07
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
03.05.2017, 09:07
Привет! Вот еще темы с ответами:

Setlength - C++
Здравствуйте, Друзья! Помогите решить данную проблему, когда допустим прописываю следующие строчки кода setlength(Pnum,kP); ...

Аналог SetLength - C#
Подскажите пожалуйста, есть ли в Шарпе аналог SetLength Delphi? (Задача на работу очереди. Хотела реализвовать массивом с начальным...

Функция SetLength - C++ Builder
Эта функция (SetLength) работает? Как ей пользоваться? У меня ошибку выдаёт. В интернете видел на это нарекания у других.

Acess Violation из-за SetLength - Delphi
Здравствуйте, хочу сделать что-то наподобии калькулятора, и столкнулся с одной проблемой. Во время работы с программой, я формирую...


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

Или воспользуйтесь поиском по форуму:
15
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2018, vBulletin Solutions, Inc.
Рейтинг@Mail.ru