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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 23.04.2014, 16:07   #1
DowJones
 
Регистрация: 05.11.2013
Сообщений: 8
По умолчанию Массив

День добрый) Дали написать задачу: в целочисельном массиве [1..b] найти число, которое повторяется максимальное количество раз. Если чисел два - то одно из них. Собственно я написал но возникла такая проблемка: b никак не хочет обьявляться. Пробовал его обьявить со всеми переменными типа integer - никак не видит и выдает ошибку Неизвестный идентификатор.
"b" - это число, котороя я должен ввести сам с клавиатуры при запуске программы, тоесть это размерность массива, от 1 до b. Начало было примерно такое:
program sasa;
uses crt;
var x:array [1..b] of integer
y:real;
i,j,max,s,b:integer;
begin

Может кто шарит в этом, поможет.. Как нужно обьявить b что бы прога заработала?..

Последний раз редактировалось DowJones; 23.04.2014 в 16:10.
DowJones вне форума Ответить с цитированием
Старый 23.04.2014, 16:16   #2
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

Цитата:
b никак не хочет обьявляться.
LOL!


Смотрите, то, что Вы пытаетесь сделать, называется "динамические массивы".
И тут всё упирается в то, какие есть ограничения на размер массива и какой у Вас компилятор Паскаля (в новых компиляторах FreePascal/Delphi есть нормальные динамические массивы, для старых нужного эффекта приходится добиваться более сложным путём. Подозреваю, что у Вас как раз второй случай, у Вас же старый TurboPascal ?)

самые простые варианты, использовать статический массив вместо динамического.

примерно так.

если переменная b задана в условиях задачи.
тогда:
Код:
program sasa;
uses crt;
const b =  20; {берём из условия задачи}
var 
  x:array [1..b] of integer;
.....
если переменная b не задана в условиях задачи, но мы можем позволить себе ограничить её каким-то заведомо большим значением.
Тогда:
Код:
program sasa;
uses crt;
const MaxSize =  1000; {задаём размер заведомо больше возможного значения}
var 
  x:array [1..MaxSize] of integer;
  b : integer;
.....
begin 
   repeat
      Write('Введите размер массива (от 1 до ',MaxSize,'): ');
      Readln(b);
   until (b>=1) and (b<=MaxSize);
...

есть и другие, более сложные способы решения задачи (например, использование указателей и динамическое выделение памяти). Но, думаю, что Вам и этих вариантов на первое время хватит...

Последний раз редактировалось Serge_Bliznykov; 23.04.2014 в 16:22.
Serge_Bliznykov вне форума Ответить с цитированием
Старый 23.04.2014, 16:18   #3
DowJones
 
Регистрация: 05.11.2013
Сообщений: 8
По умолчанию

У меня старенький ТурбоПаскаль!)
DowJones вне форума Ответить с цитированием
Старый 23.04.2014, 16:26   #4
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

я дописал свой пост...
Serge_Bliznykov вне форума Ответить с цитированием
Старый 23.04.2014, 16:30   #5
DowJones
 
Регистрация: 05.11.2013
Сообщений: 8
По умолчанию

Да, спасибо большое. Попробую. второй вариант!)
DowJones вне форума Ответить с цитированием
Старый 24.04.2014, 11:48   #6
DowJones
 
Регистрация: 05.11.2013
Сообщений: 8
По умолчанию

Блин сейчас на екзамене препод говорит что есть еще какой то вариант! Вывести именно b. Не задавая ей какое либо число вначале... Отзовитесь кто нибудь)
DowJones вне форума Ответить с цитированием
Старый 24.04.2014, 13:00   #7
Vanta11a
Lawful Evil
Участник клуба
 
Аватар для Vanta11a
 
Регистрация: 13.05.2008
Сообщений: 1,208
По умолчанию

Пост №2, второй вариант. Задание размера массива изначально больше максимального.
Алгоритм - бесплатен. Поиск багов - бесплатен. Реализация алгоритма - за отдельную плату.
На форуме помогают советами и объясняют, а не пишут на халяву программы, лабы, курсачи и т.д. (c)
Vanta11a вне форума Ответить с цитированием
Старый 24.04.2014, 13:35   #8
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

Цитата:
Сообщение от Vanta11a
Пост №2, второй вариант. Задание размера массива изначально больше максимального.
угу. я бы начал с того, чтобы этот второй вариант задействовал.
я так понял, что автор темы именно этот вариант и взял!


НО! Можно и через указатели сделать.
вот рабочий пример:
Код:
{пример реализации динамического массива в TurboPascal
 через указатели и выделение памяти
}
type
  MyDynArray = array[1..1] of integer;
  pMyDynArray =^MyDynArray;

var
  Arr : pMyDynArray;
  i, a,  b: integer;

begin
  WriteLn('Введите размер массива (b): ');
  Readln(b);

  GetMem( Arr, sizeOf(Integer)*b); {выделим требуемую под массив память. Проверку на доступность не делаем!}

{$R-}   {выключим проверку выхода индекса массива за пределы границ,
          объявленных в типе массива}
  for i:=1 to b do begin
    Write('введите ',i,' элемент массива');
    Readln(Arr^[i]);
  end;

  WriteLn;
  WriteLn('Для доказательство того, что всё работает, выведем содержимое исходного массива в обратном порядке');

  WriteLn('______________________  содержимое массива _________');
  for i:=b downto 1 do
    WriteLn(Arr^[i]);

  {теперь освободим занятую память}
  FreeMem(Arr, sizeOf(Integer)*b);

  Readln;
end.

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

Последний раз редактировалось Serge_Bliznykov; 24.04.2014 в 13:38.
Serge_Bliznykov вне форума Ответить с цитированием
Старый 24.04.2014, 15:33   #9
Poma][a
Новичок
Джуниор
 
Регистрация: 11.10.2011
Сообщений: 3,882
По умолчанию

Цитата:
У меня старенький ТурбоПаскаль!)
А преподавателя что?
Poma][a вне форума Ответить с цитированием
Старый 24.04.2014, 17:39   #10
DowJones
 
Регистрация: 05.11.2013
Сообщений: 8
По умолчанию

Это у препода ТурбоПаскаль!)
Ребят всем спасибо!)
DowJones вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Дан одномерный массив, сформировать новый массив по заданному правилу {Delphi} Nickolai47 Помощь студентам 5 16.12.2012 14:51
С# задан массив 5х5. сформировать массивы А и В. в массив А поместить элементы с четными индексами, в массив В с нечетны Koksa Помощь студентам 0 10.10.2011 11:26
Запись координат в массив в реал тайм, Как записать координаты в массив Dark19 Visual C++ 2 21.06.2011 18:45
Из массив А получить массив В, удвоив все нечётные элементы удвоены ( на Pascal) KARTER Помощь студентам 1 18.06.2011 19:58
Массив - Нужно написать массив и распечатать на экран с конца в начало(язык С++) econ Помощь студентам 1 29.05.2011 22:02