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

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

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

Восстановить пароль
Повторная активизация e-mail

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

Ответ
 
Опции темы Поиск в этой теме
Старый 29.06.2017, 23:56   #1
Vladislav125
Пользователь
 
Регистрация: 27.09.2016
Сообщений: 66
Сообщение [Pascal] Работа с массивами

Помогите исправить ошибку вот отрывок программы ее не нужно изменять здесь все правильно:
Код:
Zapis=Record
    Kod:integer;
    Nazvanie:string[20];
    Kol_vo:integer;
    Prot:real;
вот программа:
Код:
Program primer;
uses crt;

Type
    Zapis=Record
    Kod:integer;
    Nazvanie:string[20];
    Kol_vo:integer;
    Prot:real;
    end;

Var f,f2:text;
i,j,N,nazv_a:integer;
 s1,s2:string;
ekz:array[1..100] of Zapis;
  X:Zapis;
BEGIN
i:=0;
Assign(f,'Çàïèñè.txt');
Assign(f2,'çàïèñè2.txt');
Reset(f);
Rewrite(f2);
While NOT Eof(f) do
                   begin
                   i:=i+1;
                   Readln(f,s1);
                   With ekz[i] do
                               begin
                               Kod:=trim(Copy(s1,1,20));
                               Nazvanie:=trim(Copy(s1,21,17));
                               Kol_vo:=trim(Copy(s1,37,41));
                               Prot:=trim(Copy(s1,45,51));
                               end;
                   end;
N:=i;
writeln(':');
writeln();

for i:=1 to n do
                with ekz[i] do
                if Nazvanie='Êîëüöåâàÿ' then
                         begin
                         writeln(Kod,' ',nazvanie,' ',Kol_vo,' ',Prot);
                         end;
                         Nazv_a:=i;



For i:=1 to N do
  With ekz[i] do
              begin
              Writeln(f2,Kod:20,' ',
                      Nazvanie:20,' ',
                      Kol_vo:4,' ',
                      Prot:10);
              end;
Close(f);
Close(f2);
END.
Ошибка вот здесь
Код:
begin
                               Kod:=trim(Copy(s1,1,20));
                               Nazvanie:=trim(Copy(s1,21,17));
                               Kol_vo:=trim(Copy(s1,37,41));
                               Prot:=trim(Copy(s1,45,51));
                               end;
я просто не могу понять на что изменить функцию trim. кто в этом разбирается измените пожалуйста.

Последний раз редактировалось Vladislav125; 29.06.2017 в 23:58.
Vladislav125 вне форума Ответить с цитированием
Старый 30.06.2017, 00:44   #2
digitalis
Старожил
 
Аватар для digitalis
 
Регистрация: 04.02.2011
Сообщений: 4,550
По умолчанию

Язык какой ? С этого надо начинать вопрос. И почему ее нужно заменять? Если это Delphi, то это стандартная функция. Удаляет начальные и конечные пробелы.

Последний раз редактировалось digitalis; 30.06.2017 в 00:50.
digitalis вне форума Ответить с цитированием
Старый 30.06.2017, 07:36   #3
Vladislav125
Пользователь
 
Регистрация: 27.09.2016
Сообщений: 66
По умолчанию

Язык паскаль, их поменять нужно из за того что ошибку выдает
Vladislav125 вне форума Ответить с цитированием
Старый 30.06.2017, 07:47   #4
Sciv
Старожил
 
Аватар для Sciv
 
Регистрация: 16.05.2012
Сообщений: 3,211
По умолчанию

Да вот прямо из Дельфы код и выдернут:

Код:
function Trim(const S: string): string;
var
  I, L: Integer;
begin
  L := Length(S);
  I := 1;
  if (L > 0) and (S[I] > ' ') and (S[L] > ' ') then Exit(S);
  while (I <= L) and (S[I] <= ' ') do Inc(I);
  if I > L then Exit('');
  while S[L] <= ' ' do Dec(L);
  Result := Copy(S, I, L - I + 1);
end;
Начал решать проблему с помощью регулярных выражений. Теперь решаю две проблемы...
Sciv вне форума Ответить с цитированием
Старый 30.06.2017, 07:55   #5
Vladislav125
Пользователь
 
Регистрация: 27.09.2016
Сообщений: 66
По умолчанию

У меня язык паскаль, хотя они не чем не отличаются) Мне нужно только значение trim изменить и все, а я не знаю его на что изменить пробывал Val не получается
Vladislav125 вне форума Ответить с цитированием
Старый 30.06.2017, 08:01   #6
Aleksandr H.
2 the Nation Glory
Старожил
 
Аватар для Aleksandr H.
 
Регистрация: 27.05.2014
Сообщений: 3,289
По умолчанию

Vladislav125 http://www.programmersforum.ru/showp...82&postcount=4
Кто умер, но не забыт, тот бессмертен.
Лао-Цзы.
Aleksandr H. вне форума Ответить с цитированием
Старый 30.06.2017, 08:08   #7
Vladislav125
Пользователь
 
Регистрация: 27.09.2016
Сообщений: 66
По умолчанию

Вы меня просто не поняли, мне только нужно значение поменять trim вот здесь
Код:
  begin
                               Kod:=trim(Copy(s1,1,20));
                               Nazvanie:=trim(Copy(s1,21,17));
                               Kol_vo:=trim(Copy(s1,37,41));
                               Prot:=trim(Copy(s1,45,51));
                               end;
Vladislav125 вне форума Ответить с цитированием
Старый 30.06.2017, 08:16   #8
Sciv
Старожил
 
Аватар для Sciv
 
Регистрация: 16.05.2012
Сообщений: 3,211
По умолчанию

Владислав, мы Вас прекрасно поняли. Я Вам дал конкретное решение: если в паскале нет собственной функции trim - её нужно написать. Код функции я тоже дал. Просто добавьте его в свою программу и нигде больше ничего менять не нужно будет.

В паскале нет аналога трима. Просто так без использования циклов Вы его ни на что не поменяете. Собственно, функции для таких случаев и существуют, чтобы вынести повторяющийся набор действий в отдельный код и не писать его каждый раз заново стопицот раз.
Начал решать проблему с помощью регулярных выражений. Теперь решаю две проблемы...
Sciv вне форума Ответить с цитированием
Старый 30.06.2017, 09:38   #9
AlexMas
Пользователь
 
Аватар для AlexMas
 
Регистрация: 30.05.2012
Сообщений: 69
По умолчанию

Ну и плюсом ко всему, не стоит пихать string в integer напрямую, есть чудесная ф-я StrToInt =)
AlexMas вне форума Ответить с цитированием
Старый 30.06.2017, 09:55   #10
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

Цитата:
Сообщение от AlexMas Посмотреть сообщение
не стоит пихать string в integer
однозначно не стоит. да компилятор это и не позволит.


Цитата:
Сообщение от AlexMas Посмотреть сообщение
есть чудесная ф-я StrToInt
а вот тут беда-печалька.
судя по всему у автора темы Turbo Pascal. в нём не было функции StrToInt

впрочем, никто не мешает её написать (так же, как и trim())
примерно так:
Код:
function StrToInt(Value: string): integer; 
Var 
   code, i: integer; 
begin
   StrToInt:=0;
   Val(Value, i, code); 
   if code = 0 then 
      StrToInt:=i
   else
      WriteLn('#Error: inccorect integer value in string '+Value) 
end;
Serge_Bliznykov вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Pascal. работа с массивами ksyusha19 Помощь студентам 1 14.02.2011 22:20
Работа с массивами. Pascal DarkBeowulf Помощь студентам 2 24.12.2010 21:18
Работа с массивами. Pascal. shatoo Помощь студентам 3 27.09.2009 23:57
Работа с массивами на pascal Mihael-Vlz Паскаль, Turbo Pascal, PascalABC.NET 2 18.12.2008 16:30