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

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

Вернуться   Форум программистов > Delphi программирование > Паскаль, Turbo Pascal, PascalABC.NET
Регистрация

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 01.03.2011, 21:10   #1
vereney
Пользователь
 
Регистрация: 01.03.2011
Сообщений: 28
По умолчанию написать функцию, которая по элементу массива будет определять его номер.

кАК написать функцию, которая по элементу массива будет определять его номер?
vereney вне форума Ответить с цитированием
Старый 04.03.2011, 14:54   #2
Slap
Пользователь
 
Регистрация: 03.09.2010
Сообщений: 25
Радость

Код:
function num(b:array[1..n] of integer):integer; {n-константа, определяющая количество элементов в данном массиве}
var k, j, r:integer;
begin
 write('Введите значение элемента массива');
 read(k);
 num:=0;
  repeat;
  begin
   inc(j);
  end;
  until  (j>n) or( k=b[j]);
  if j<=n then
  num:=j;
end;

Последний раз редактировалось Slap; 04.03.2011 в 15:48.
Slap вне форума Ответить с цитированием
Старый 04.03.2011, 16:50   #3
veniside
Старожил
 
Регистрация: 03.01.2011
Сообщений: 2,508
По умолчанию

Slap, 2 ошибки в коде )


Код:
const
  N = 100;

type
  myArray = array[1..N] of Integer;

function indexOf(const A: myArray; value: Integer): Integer;
var
 i: Integer;
begin
  indexOf := -1;
  for i := 1 to N do begin
    //
    if (A[i] = value) then begin
      //
      indexOf := i;
      break;
    end;
  end;
end;
const перед A можно убрать, не помню, был он в Паскале или нет.
"Когда приходит положенное время, человек перестаёт играть в пинбол. Только и всего."
veniside вне форума Ответить с цитированием
Старый 04.03.2011, 18:21   #4
Slap
Пользователь
 
Регистрация: 03.09.2010
Сообщений: 25
По умолчанию

Цитата:
Сообщение от veniside Посмотреть сообщение
Slap, 2 ошибки в коде )
Какие именно ошибки?
Slap вне форума Ответить с цитированием
Старый 04.03.2011, 19:27   #5
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

Цитата:
Сообщение от Slap
Какие именно ошибки?
я не знаю, какие ошибки имел в виду veniside

но точно вижу следующие ошибки:

1) то, что Вы забываете перед началом цикла иницилизировать j:
j := 0;

кто Вам сказал, что там будет ноль?! я и для глобальных подобные трюки не одобряю. А тут будет явная ошибка - это же переменная локальная, значит будет в стеке, значит там будет всё что угодно!

2)
Код:
 function num(b:array[1..n] of integer):integer;
Так параметры компилятор описывать не велит (ошибка при компиляции)

3)
Код:
until  (j>n) or( k=b[j]);
когда j станет больше n то будет проверяться второе условие (k=b[j]) или не будет зависит от настроек компилятора (сокращённое вычисление булевых выражений или полное). И если полное - получите range check error в связи с выходами индекса за пределы массива..
Serge_Bliznykov вне форума Ответить с цитированием
Старый 04.03.2011, 21:58   #6
veniside
Старожил
 
Регистрация: 03.01.2011
Сообщений: 2,508
По умолчанию

спасибо, Сергей, да, я говорил о первых двух, третью не заметил )
"Когда приходит положенное время, человек перестаёт играть в пинбол. Только и всего."
veniside вне форума Ответить с цитированием
Старый 06.03.2011, 20:47   #7
vereney
Пользователь
 
Регистрация: 01.03.2011
Сообщений: 28
По умолчанию

Спасибо, ребята!
vereney вне форума Ответить с цитированием
Старый 06.03.2011, 23:42   #8
Вадим Мошев

Старожил
 
Аватар для Вадим Мошев
 
Регистрация: 12.11.2010
Сообщений: 8,568
По умолчанию

Цитата:
Сообщение от Slap Посмотреть сообщение
Код:
function num(b:array[1..n] of integer):integer; {n-константа, определяющая количество элементов в данном массиве}
var k, j, r:integer;
begin
 write('Введите значение элемента массива');
 read(k);
 num:=0;
  repeat;
  begin
   inc(j);
  end;
  until  (j>n) or( k=b[j]);
  if j<=n then
  num:=j;
end;
Хоть тема уже неактуальна, тем не менее, замечу, что:
1. После Repeat нельзя ставить точку я запятой!
2. Нет смысла заключать между словами Begin и End то, что что находится между словами Repeat и Until
Вадим Мошев вне форума Ответить с цитированием
Старый 07.03.2011, 04:46   #9
veniside
Старожил
 
Регистрация: 03.01.2011
Сообщений: 2,508
По умолчанию

> После Repeat нельзя ставить точку я запятой!

Можно. Это полноценный оператор, так что точку с запятой можно ставить там, где допустим оператор. Единственное исключение — перед else нельзя.
"Когда приходит положенное время, человек перестаёт играть в пинбол. Только и всего."
veniside вне форума Ответить с цитированием
Старый 07.03.2011, 12:52   #10
Dvoishnik
Форумчанин
 
Регистрация: 12.02.2011
Сообщений: 808
По умолчанию

точку ставить можно
но что она есть что ее нет от этого неего не меняеться)
Терпение!Дежурный экстрасенс скоро свяжется с вами!

Последний раз редактировалось Dvoishnik; 07.03.2011 в 12:59.
Dvoishnik вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Дано 2 слова. Написать программу, которая будет определять присутствует ли слово 1 в слове 2. Паскалька^^ Помощь студентам 5 19.10.2010 00:55
написать программу,которая будет определять,и выводить на экран английскую букву Tiny Помощь студентам 3 25.06.2010 23:23
Найти максимальный элемент массива и его порядковый номер через функцию на С ++ SeReGa48 Помощь студентам 1 31.05.2010 23:08
Программа которая будет определять, сколько всего треугольников в заданной фигуре, Княжна Татьяна Помощь студентам 0 20.12.2009 18:37