Как передать массив в функцию паскаль
Перейти к содержимому

Как передать массив в функцию паскаль

  • автор:

Как правильно передать массив в функцию?

Author24 — интернет-сервис помощи студентам

Как правильно передать массив в функцию?
Всем привет. Не могу понять, какой тип нужно передать в функцию glBufferData()? У меня есть.

Как правильно передать массив в функцию?
Возникла такая загвоздка: написал три функции для работы с массивом. Вроде всё компилирует, кроме.

Как передать правильно массив в функцию?
Пишу функцию, которой в качестве параметра передается несколько чисел и массив x. Упрощенный код.

Как правильно передать массив в функцию?
В этой задаче я ввожу двухмерный массив с 6 чисел, передаю его в функцию, потом получаю новый масив.

Как передать массив в функцию паскаль

Профиль
Группа: Участник
Сообщений: 55
Регистрация: 2.2.2007

Репутация: 2
Всего: 2

В процессе решения задачи для одного из страждущих возникла проблема: нужно как-то в Паскале передать двумерный массив в качестве параметра. В си это легко, а вот в Паскале. кто знает — просьба выложить код.

Дата 10.5.2007, 15:13 (ссылка) | (нет голосов) Загрузка .

Профиль
Группа: Комодератор
Сообщений: 2072
Регистрация: 15.11.2004

Репутация: 34
Всего: 116

В чем проблема в Паскале? Как описана матрица, которую хочешь передать как аргумент, покажи.

Дата 10.5.2007, 15:16 (ссылка) | (нет голосов) Загрузка .

Профиль
Группа: Участник
Сообщений: 55
Регистрация: 2.2.2007

Репутация: 2
Всего: 2

Описана стандартно:

Код
var a: array[1. 3, 1. 3] of integer;

Вот её надо и передать как аргумент. В Си это как два пальца а в Паскале я не умею, а помочь хоцца

Дата 10.5.2007, 15:19 (ссылка) | (нет голосов) Загрузка .

Профиль
Группа: Комодератор
Сообщений: 2072
Регистрация: 15.11.2004

Репутация: 34
Всего: 116

В Паскале даже 2 пальца не понадобятся:

Код
type
matrix = array[1. 3, 1. 3] of integer;

procedure f(var mx: matrix);
begin
.
end;

ВНИМАНИЕ! Прежде чем создавать темы, или писать сообщения в данный раздел, ознакомьтесь, пожалуйста, с Правилами форума и конкретно этого раздела.
Несоблюдение правил может повлечь за собой самые строгие меры от закрытия/удаления темы до бана пользователя!

  • Название темы должно отражать её суть! (Не следует добавлять туда слова «помогите», «срочно» и т.п.)
  • При создании темы, первым делом в квадратных скобках укажите область, из которой исходит вопрос (язык, дисциплина, диплом). Пример: [C++].
  • В названии темы не нужно указывать происхождение задачи (например «школьная задача», «задача из учебника» и т.п.), не нужно указывать ее сложность («простая задача», «легкий вопрос» и т.п.). Все это можно писать в тексте самой задачи.
  • Если Вы ошиблись при вводе названия темы, отправьте письмо любому из модераторов раздела (через личные сообщения или report).
  • Для подсветки кода пользуйтесь тегами [code][/code] (выделяйте код и нажимаете на кнопку «Код»). Не забывайте выбирать при этом соответствующий язык.
  • Помните: один топик — один вопрос!
  • В данном разделе запрещено поднимать темы , т.е. при отсутствии ответов на Ваш вопрос добавлять новые ответы к теме, тем самым поднимая тему на верх списка.
  • Если вы хотите, чтобы вашу проблему решили при помощи определенного алгоритма, то не забудьте описать его!
  • Если вопрос решён, то воспользуйтесь ссылкой «Пометить как решённый», которая находится под кнопками создания темы или специальным флажком при ответе.

Если Вам помогли и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, Poseidon, Rodman

0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Центр помощи | Следующая тема »

[ Время генерации скрипта: 0.1050 ] [ Использовано запросов: 21 ] [ GZIP включён ]

Паскаль. Функция с массивом.

Практикуюсь в создании своих модулей на паскале, возникла проблема с созданием функции . Дело в том, что я не могу запихнуть в нее массив. Вот мой код,функция должна проверять является ли сумма элементов массива четной или нечетной .

_________
unit arrays;
interface
function twon(arrays:array of integer):integer;
implementation

function twon;
var
a,i,c:integer;
begin
c:=0;
for i:=1 to n do
begin
a:=arrays[i.];
c:=c+(a*a);
end;
if odd(c)=TRUE then writeln (‘‘’);
else writeln (‘);
begin
end .
_________

В цикле идет суммирование элементов массива, но цикл должен идти от i-того элемента и до n-ого , то есть конечного. Вот я и не пойму, как мне связать эту n с концом массива . Ведь когда я буду использовать массив для решения задачи, его конец будет задан константой . Я сначала пробовал просто добавить в скобках строки » function twon(arrays:array of integer):integer;» n: integer , чтобы тупо самому вводить вместо n сколько у меня элементов в массиве, но компилятор выбивает ошибку =\

  • 1 frag / 2 deaths
  • Участник

#1
15:58, 30 окт 2010

Надеюсь, это не Турбопас?
Тогда вместо n пиши Length(arrays)

Зачем бульшит? Пиши просто if odd(c)

#2
16:00, 30 окт 2010

я ставил Pascal School Pack , тут Турбо Паскаль но вроде бы доделаный. Я если честно не знаю какие там изменения, главное на вин 7 работает . Про Length я не подумал, думал такое только с строками можно. Большое спасибо, попробую

это как ?) «Если четность (c) . » если четность (с) что ?) оно же должно значение присваивать конкретное, его я и проверяю

и length не получается, пишет нужно строковое выражение (

  • 1 frag / 2 deaths
  • Участник

#3
16:07, 30 окт 2010

Бульшит (boolean shit) — в буквальном переводе «логическое говно», означает неверное понимание логических переменных, порождающее лишнюю писанину.
Типичный пример (в языке, где есть тернарный оператор): (a? true: false) вместо просто a.

Не надо писать if a = true, достаточно if a.
Не надо писать if a = false, достаточно if not a.
odd(c) уже возвращает булевское значение.
Сравнивая его с true мы опять получаем новое булевское значение, равное старому, то есть лишнее действие.
Это всё равно, что вместо i писать i+0 или i*1. Уродливо смотрится, короче.

Jeyme
> «Если четность (c) . «

Если c — чётное, то.

Jeyme
> и length не получается, пишет нужно строковое выражение (

Выкинь древний досовский хлам (я про версию Паскаля, что у тебя).
Ищи FPC или Delphi.

#4
16:11, 30 окт 2010

Ясно, спасибо за пояснение) FPC это Free Pascal ? хорошо, скачаю, спасибо. Только мне потом работу сдавать в университете, а там стоит Турбо Паскаль 🙂

  • 1 frag / 2 deaths
  • Участник

#5
16:13, 30 окт 2010

Jeyme
> Только мне потом работу сдавать в университете, а там стоит Турбо Паскаль 🙂

Блиииин.
Хреново.
Тогда передавай в функцию n явно:

function twon(n: integer; arrays:array of integer):integer;

#6
16:16, 30 окт 2010

Большое спасибо за помощь)

Передача массивов в подпрограммы, открытые массивы

Для того, чтобы передать массив в качестве параметра подпрограммы, необходимо объявлять массивы тем способом, который мы советовали в соответствующей главе. Например так: Type TArray= array [1..10] of Integer; Procedure Dummy(arr:TArr); Begin … End ; Var a:TArray; Begin … Dummy(a); .. End . Однако, такой способ передачи массив не является универсальным. Он сильно зависит от размера передаваемого массива (размер ведь указан в типе). Зачастую, многие подпрограммы должны быть написаны таким образом, чтобы они могли обрабатывать массивы произвольной длины. Например, если мы хотим написать программу, подсчитывающую среднее арифметическое элементов массива, то нас может не устроить частная реализация только для массивов длиной 10, например. В связи с этим в Pascal введены так называемые открытые массивы – это такое описание параметра в заголовке подпрограммы, в котором не указывается размер массива. Но тогда потребуется определять максимальные и минимальные индексы массива, чтобы универсальным образом их обрабатывать. В этом нам помогут две функции: 1. Low – возвращает минимальный индекс массива; 2. High – возвращает максимальный индекс массива.

86
Программирование на языке Pascal

Рассмотрим пример: Function Avg(Arr: Array of Integer): Real; Var i:Integer; Sum:Real; Begin Sum:=0; For i:=Low(Arr) To High(Arr) do Sum:=Sum+Arr[i]; Avg:=Sum/(High(Arr)-Low(Arr)+1); End ; Var A: Array [1..10] of Integer; B: Array [0..19] of Integer; I:Integer; Begin Randomize; For i:=1 to 10 do A[i]:=random(50); For i:=0 to 19 do B[i]:=random(100); WriteLn(‘Среднее первого массива=’, Avg(A)); WriteLn(‘Среднее второго массива=’, Avg(B)); End . В данном примере в функции, вычисляющей среднее арифметическое элементов массива, используются функции Low и High для перебора всех индексов передаваемого в качестве параметра массива. Как мы видим и начальные и конечные индексы у массивов A и B, которые затем предаются в функцию, различаются, но, тем не менее, функция корректно считает среднее арифметическое их элементов. Подсчет количества элементов массива ведется по формуле Low-High+1 . Где Low – это нижний индекс массива, а High – верхний.

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *