• Добро пожаловать на компьютерный форум Tehnari.ru. Здесь разбираемся с проблемами ПК и ноутбуков: Windows, драйверы, «железо», сборка и апгрейд, софт и безопасность. Форум работает много лет, сейчас он переехал на новый движок, но старые темы и аккаунты мы постарались сохранить максимально аккуратно.

    Форум не связан с магазинами и сервисами – мы ничего не продаём и не даём «рекламу под видом совета». Отвечают обычные участники и модераторы, которые следят за порядком и качеством подсказок.

    Если вы у нас впервые, загляните на страницу о форуме и правила – там коротко описано, как задать вопрос так, чтобы быстро получить ответ. Чтобы создавать темы и писать сообщения, сначала зарегистрируйтесь, а затем войдите под своим логином.

    Не знаете, с чего начать? Создайте тему с описанием проблемы – подскажем и при необходимости перенесём её в подходящий раздел.
    Задать вопрос Новые сообщения Как правильно спросить
    Если пришли по старой ссылке со старого Tehnari.ru – вы на нужном месте, просто продолжайте обсуждение.

Pascal, работа с функциями.

  • Автор темы Автор темы Dram
  • Дата начала Дата начала
Вот черт, вечно я отстаю от жизни. В каких-то реализациях Паскаля, с которыми я имел дело, задавать в явном виде массив в качестве аргумента функции было нельзя, вот я с тех пор и не задаю. Надо будет попробовать - может быть на современных пакетах и можно.
В принципе это не "превращение двумерного массива в одномерный", а просто чуть иное описание двумерного массива. Вот представьте себе, например, матрицу (двумерный массив), имеющую 3 строки и 4 столбца. Ее можно описать, как
A:ARRAY[1..3,1..4] of REAL;
Но если в той же матрице каждую строку рассматривать как одномерный массив, то можно записать и так:
A:ARRAY[1..3] of ARRAY[1..4] of REAL;
И, наконец, если в начале программы массив-строка был объявлен типом, т.е.
TYPE
AR=ARRAY[1..4] of REAL;
то массив может быть задан, как
A:ARRAY[1..4] of AR;
А теперь - внимание! ВСЕ ТРИ ЗАПИСИ МАССИВА А АБСОЛЮТНО ЭКВИВАЛЕНТНЫ! Просто, поскольку аргументом функции в программе выступали строки, то мне показалось, что так нагляднее. Если запутал, извините.
Между прочим, при обращении к элементу двумерного массива выражения A[2,3] и A[2][3] тоже абсолютно эквивалентны.
Хм... будем знать!!!
 
Vladimir_S а почему недопустима? FUN(A:ARRAY[1..10] of Integer):Real
Мне учитель сказал так именно и задавать...
Так, ну потестировал я свой Паскаль. Такая запись у меня не проходит, можно только типа FUN(A:ARRAY of Integer):Real, т.е. БЕЗ ДИАПАЗОНА. Да ну его! Буду, как привык.
 
Не стал создавать новую тему решил тут спросить.. подскажите что не так.
прога должна была находить в первом файле строки с введенным с клавиатуры словом. и эти строки сохранять во второй файл..
вот что у меня вышло
Код:
uses crt;
var
f,z:text;
str:string;
s:string;
begin
 clrscr;
 assign(f,'C:\in.txt');
 reset(f);
 assign(z,'C:\out.txt');
 append(z);
 while not EOF(f) do
 begin
  readln(f,str);
  writeln(str);
  close(f);
  readln;
 end;
end.
но паскаль сразу матерится на "reset(f);" мол путь не найден..
Хотя все .txt на месте? P.S это уже на "лаба" так для себя практикуюсь ;)
 
Последнее редактирование модератором:
Вот черт, вечно я отстаю от жизни. В каких-то реализациях Паскаля, с которыми я имел дело, задавать в явном виде массив в качестве аргумента функции было нельзя, вот я с тех пор и не задаю. Надо будет попробовать - может быть на современных пакетах и можно.
В принципе это не "превращение двумерного массива в одномерный", а просто чуть иное описание двумерного массива. Вот представьте себе, например, матрицу (двумерный массив), имеющую 3 строки и 4 столбца. Ее можно описать, как
A:ARRAY[1..3,1..4] of REAL;
Но если в той же матрице каждую строку рассматривать как одномерный массив, то можно записать и так:
A:ARRAY[1..3] of ARRAY[1..4] of REAL;
И, наконец, если в начале программы массив-строка был объявлен типом, т.е.
TYPE
AR=ARRAY[1..4] of REAL;
то массив может быть задан, как
A:ARRAY[1..4] of AR;
А теперь - внимание! ВСЕ ТРИ ЗАПИСИ МАССИВА А АБСОЛЮТНО ЭКВИВАЛЕНТНЫ! Просто, поскольку аргументом функции в программе выступали строки, то мне показалось, что так нагляднее. Если запутал, извините.
Между прочим, при обращении к элементу двумерного массива выражения A[2,3] и A[2][3] тоже абсолютно эквивалентны.

К такой интерпретации нужно относиться с большой осторожностью: дело в том, что компилятор может в целях оптимизации добавить к строкам массива пару - тройку байт, в результате чего возникнут неуловимые ошибки.
 
Dram, к сожалению, вы закрыли файл сразу после чтения из него первой строки, соответственно, при повторном обращении к файлу внутри цикла возникает ошибка о том, что файл не найден.
Вынесите команду close(f) за циклическую структуру, но перед последним end.
 
Упс.. я выложил немного не тот код.... щас поправлю. походу я не сохранился в нужный момент и доробатывал не тот код :) Извините вперь буду внимательней
 
Последнее редактирование:
Назад
Сверху