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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 23.04.2016, 14:25   #1
NikiToZz_
Пользователь
 
Регистрация: 23.04.2016
Сообщений: 75
Печаль Массивы замучили..

Привет, друзья. Написал программку к задаче: Удалить из массива, заполненного с клавиатуры, элементы, последняя цифра которых четная и само число делится на нее...

Код:
program massiv_55b;
uses crt;
Const N=10;
  var a,b:array[1..N] of integer;
                  l,a1,m,j,i,z:integer;
begin
  for i:=1 to N do begin
    write ('Введите элемент массива ');
    readln(z);
    a[i]:=z;
    clrscr;
  end;
  j:=1;
  for i:=1 to N do begin
    a1:=a[i] mod 10;
    if (a1 mod 2 = 0) and (a[i] mod a1 = 0) then     begin
       b[j]:=i;
 //      write (b[j],' ');
       j:=j+1;
       m:=j;
       end;
  end;
  L:=N;
  for j:=1 to m do begin
      for i:=b[j] to L-1 do
      a[i]:=a[i+1];
  L:=L-1;
  end;
  for i:=1 to L do
      write (a[i],' ');
  readln;
end.
ошибка вылетает в строчке (a[i]:=a[i+1], якобы вышел индекс за пределы массива, чего не может быть.. как действовать, господа?

Последний раз редактировалось Вадим Мошев; 23.04.2016 в 14:29.
NikiToZz_ вне форума Ответить с цитированием
Старый 23.04.2016, 19:00   #2
ViktorR
Старожил
 
Регистрация: 23.10.2010
Сообщений: 2,304
По умолчанию

Посмотри как меняется значение переменной m.
Можно ввести такой набор данных, что условный оператор, проверяющий четность последней цифры и т.д не будет выполняться.
В этом случае m = 0, и предположение
Цитата:
... якобы вышел индекс за пределы массива, чего не может быть..
станет не столь очевидным.

Как-то так, ...
Как-то так, ...
ViktorR вне форума Ответить с цитированием
Старый 23.04.2016, 21:41   #3
SecretSilent
Форумчанка
 
Аватар для SecretSilent
 
Регистрация: 28.04.2013
Сообщений: 9
По умолчанию

Цитата:
Сообщение от NikiToZz_ Посмотреть сообщение
Привет, друзья. Написал программку к задаче: Удалить из массива, заполненного с клавиатуры, элементы, последняя цифра которых четная и само число делится на нее...

Код:
.......
  for i:=1 to N do begin
    a1:=a[i] mod 10;
........
j:=j+1;
m:=j;
......
for j:=1 to m do begin
......
ошибка вылетает в строчке (a[i]:=a[i+1], якобы вышел индекс за пределы массива, чего не может быть.. как действовать, господа?
Почему ж не может быть? По сути, j изменяется так же, как и i в цикле, т.е. m=N. Массив а от 1 до N, вот вам и ошибка - элемент a[i+1], т.е. a[N+1], выходит за допустимый диапазон значений.
SecretSilent вне форума Ответить с цитированием
Старый 24.04.2016, 14:36   #4
NikiToZz_
Пользователь
 
Регистрация: 23.04.2016
Сообщений: 75
По умолчанию

Цитата:
По сути, j изменяется так же, как и i в цикле, т.е. m=N.
Это не так, потому что элементами массива b[j] являются лишь некоторые i, удовлетворяющие условию, а значит m<N.
NikiToZz_ вне форума Ответить с цитированием
Старый 24.04.2016, 14:38   #5
NikiToZz_
Пользователь
 
Регистрация: 23.04.2016
Сообщений: 75
По умолчанию

Цитата:
Можно ввести такой набор данных, что условный оператор, проверяющий четность последней цифры и т.д не будет выполняться.
В моем случае все данные вводятся с клавиатуры, и я специально ввожу данные, удовлетворяющие условию.. Ошибка в другом

Последний раз редактировалось NikiToZz_; 24.04.2016 в 14:42.
NikiToZz_ вне форума Ответить с цитированием
Старый 24.04.2016, 14:55   #6
Аватар
Старожил
 
Аватар для Аватар
 
Регистрация: 17.11.2010
Сообщений: 19,042
По умолчанию

Код:
       j:=j+1;
       m:=j;
поменяй местами
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию
Аватар вне форума Ответить с цитированием
Старый 24.04.2016, 15:08   #7
NikiToZz_
Пользователь
 
Регистрация: 23.04.2016
Сообщений: 75
По умолчанию

Аватар, спасибо, все работает!)
Правда, чуть-чуть неправильно, но это уже мои недоработки.
NikiToZz_ вне форума Ответить с цитированием
Старый 24.04.2016, 15:52   #8
Аватар
Старожил
 
Аватар для Аватар
 
Регистрация: 17.11.2010
Сообщений: 19,042
По умолчанию

Вот видишь, а говоришь не может быть. А как раз там при определенных условиях m становилось больше n
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию
Аватар вне форума Ответить с цитированием
Старый 24.04.2016, 15:56   #9
NikiToZz_
Пользователь
 
Регистрация: 23.04.2016
Сообщений: 75
Хорошо Итог

Аватар, да, я понял в чем там ошибка.. Но и в конце тоже была недоработка теперь же вот такая программа получилась к исходной задаче. Конечно, она полностью не оптимизирована, но она работает! =)
Цитата:
program massiv_55b;
uses crt;
Const N=10;
var a,b:array[1..N] of integer;
o,l,a1,m,j,i,z:integer;
begin
for i:=1 to N do begin
write ('Введите элемент массива ');
readln(z);
a[i]:=z;
clrscr;
end;
j:=1;
for i:=1 to N do begin
a1:=a[i] mod 10;
if (a1 mod 2 = 0) and (a[i] mod a1 = 0) then begin
b[j]:=i;

// write (b[j],' ');
m:=j;
j:=j+1;
end;
end;
{ for j:=1 to m do
writeln (b[j],' '); }
L:=N;
j:=1;
o:=0;
while j<=m do begin
for i:=b[j]-o to L-1 do
a[i]:=a[i+1];
L:=L-1; //Нужно номер i менять на 1 вниз.. УРА! сделал!
j:=j+1;
o:=o+1;
end;
for i:=1 to L do
write (a[i],' ');
readln;
end.
NikiToZz_ вне форума Ответить с цитированием
Ответ


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

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
написать программу массивы (C++) - Даны два массива, скопировать эти массивы в 3-й результирующий (размером 10 элементов) так, что Саша1990 Помощь студентам 1 02.02.2015 16:03
Одномерные массивы, двумерные массивы, строки Sand093 C++ Builder 11 20.05.2012 21:48
Двумерные массивы(матрица) 2)Строковые массивы(строки): 3)Структуры nuriyat Помощь студентам 1 21.01.2012 16:16
Двумерные массивы(массивы указателей на массивы) krytishka99 Помощь студентам 1 29.12.2011 19:51
Даны одномерные массивы А и В. Сформировать массивы, состоящие из элемент LyaLya Помощь студентам 15 20.12.2009 14:12