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

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

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

Восстановить пароль

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

Ответ
 
Опции темы Поиск в этой теме
Старый 11.02.2012, 20:54   #1
Yuuuu
Пользователь
 
Регистрация: 26.01.2012
Сообщений: 16
По умолчанию две задачи на массив

Ребят, помогите мне плиз разобраться с ещё двумя задачками. В школе зачёт надо как-то не завалить;(

Дан массив целых чисел (n=20), заполненный случайным образом числами из промежутка [-45;95].
1 Удалить из него все элементы, кратные 7 и принадлежащие промежутку [a;b]. a, b вводятся с клавиатуры.
2Вставить число k между всеми соседними элементами массива, которые образуют пару элементов с одинаковыми знаками. k вводится с клавиатуры.

Язык: паскаль.

спасибо!
Yuuuu вне форума Ответить с цитированием
Старый 11.02.2012, 21:00   #2
rUs_LAN
Форумчанин
 
Регистрация: 15.11.2008
Сообщений: 577
По умолчанию

Цитата:
Сообщение от Yuuuu Посмотреть сообщение
Ребят, помогите мне плиз разобраться с ещё двумя задачками. В школе зачёт надо как-то не завалить;(
спасибо!
чем помочь то?
rUs_LAN вне форума Ответить с цитированием
Старый 11.02.2012, 21:03   #3
Yuuuu
Пользователь
 
Регистрация: 26.01.2012
Сообщений: 16
По умолчанию

Цитата:
Сообщение от rUs_LAN Посмотреть сообщение
чем помочь то?
Да много чем)
просто хотя бы написать алгоритм решения, основные формулы.
Yuuuu вне форума Ответить с цитированием
Старый 11.02.2012, 21:07   #4
VIK_aka_TOR
Участник клуба
 
Аватар для VIK_aka_TOR
 
Регистрация: 30.01.2011
Сообщений: 1,578
По умолчанию

Цитата:
Сообщение от Yuuuu Посмотреть сообщение
Ребят, помогите мне плиз разобраться с ещё двумя задачками. В школе зачёт надо как-то не завалить;(

Дан массив целых чисел (n=20), заполненный случайным образом числами из промежутка [-45;95].
1 Удалить из него все элементы, кратные 7 и принадлежащие промежутку [a;b]. a, b вводятся с клавиатуры.
2Вставить число k между всеми соседними элементами массива, которые образуют пару элементов с одинаковыми знаками. k вводится с клавиатуры.

Язык: паскаль.

спасибо!
не первый же раз обращаетесь... пора бы уже и научится что помогают в основном если имеются наработки... остальное за деньги... как правило...

что бы вовсе ничего не получалось - это уже ваша лень...
пишу код не только за печеньки
VIK_aka_TOR вне форума Ответить с цитированием
Старый 11.02.2012, 21:13   #5
Yuuuu
Пользователь
 
Регистрация: 26.01.2012
Сообщений: 16
По умолчанию

Наработки? Это первая...
var a,b:array [1..100] of integer;
k,j,f,a,b,i:integer;
begin
randomize;
readln(a);
readln(b);
k:=0;
for i:=1 to 20 do
begin
a[i]:=random(140)-45;
f:=0;
for j:=a to b do
if (a[i]=j) and (a[i] mod 7 =0) then f:=1;
if f=0 then
begin
k:=k+1;
b[k]:=a[i];
end;
end;
for i:=1 to k do
writeln(b[i]);
end.
Yuuuu вне форума Ответить с цитированием
Старый 11.02.2012, 21:26   #6
rUs_LAN
Форумчанин
 
Регистрация: 15.11.2008
Сообщений: 577
По умолчанию

у вас массив заполнен числами из промежутка [-45; 95].

Если элемент массива кратный 7, то присваиваем ему значение не из этого промежутка например 100,

А когда выводите, сделайте простую проверку если элемент == 100, то вы его просто не будет выводить на экран.
rUs_LAN вне форума Ответить с цитированием
Старый 11.02.2012, 21:34   #7
VIK_aka_TOR
Участник клуба
 
Аватар для VIK_aka_TOR
 
Регистрация: 30.01.2011
Сообщений: 1,578
По умолчанию

и как только это ваш компилятор захавал... тут же повторное объявление переменных
Цитата:
Сообщение от Yuuuu Посмотреть сообщение
Наработки? Это первая...
var a,b:array [1..100] of integer;
k,j,f,a,b,i:integer;
begin
randomize;
readln(a);
readln(b);
k:=0;
for i:=1 to 20 do
begin
a[i]:=random(140)-45;
f:=0;
for j:=a to b do
if (a[i]=j) and (a[i] mod 7 =0) then f:=1;
if f=0 then
begin
k:=k+1;
b[k]:=a[i];
end;
end;
for i:=1 to k do
writeln(b[i]);
end.
подредактировал... точнее почти сделал все по своему...
Код:
var x:array [1..20] of integer;
a,b,i:integer;
begin
randomize;
readln(a);
readln(b);
writeln('начальный масив:');
for i:=1 to 20 do
  begin
    x[i]:=random(141)-45;
    writeln('x[',i,']=', x[i]); 
  end;
writeln('итоговый массив');
  for i:=1 to 20 do
  if ((x[i] >= a) and (x[i] <= b)) or (((x[i] mod 7) = 0) and (x[i] <> 0) )then continue
  else
    writeln('x[',i,']=', x[i]);
end.
то что нужно доработаете...
пишу код не только за печеньки
VIK_aka_TOR вне форума Ответить с цитированием
Старый 11.02.2012, 21:37   #8
Yuuuu
Пользователь
 
Регистрация: 26.01.2012
Сообщений: 16
По умолчанию

Цитата:
Сообщение от rUs_LAN Посмотреть сообщение
у вас массив заполнен числами из промежутка [-45; 95].

Если элемент массива кратный 7, то присваиваем ему значение не из этого промежутка например 100,

А когда выводите, сделайте простую проверку если элемент == 100, то вы его просто не будет выводить на экран.
Ок, спасибо. Всё получилось)
Yuuuu вне форума Ответить с цитированием
Старый 11.02.2012, 21:59   #9
rUs_LAN
Форумчанин
 
Регистрация: 15.11.2008
Сообщений: 577
По умолчанию

Для облегчения работы с 2гим задачей создать счетчик (переменную целого типа) и на этапе когда вы элемента массива который кратен 7 присваиваете допустим 100, увеличивайте счетчик на 1.

2. Теперь необходимо создать еще одну переменную (насколько я помню в паскале нельзя создавать переменные в теле программу поэтому необходимо внести правку в соответствующий раздел программы) типа массив с таким же размером начальный массив. Далее необходимо создать еще один цикл в котором проверять элементы существующего массива на то или они == 100. Если текущий элемент массива <> 100 записать его в новый массив. Теперь будем работать с новым массивом.
Для начала нам необходимо знать его размер. Размер исходного массива равен 20, размер нового массива будет равняться 20 - счетчик который мы создали на 1шому шагу.

Объявляет еще один массив, и инициализирует все элементы значениями которые не входят в ваш промежуток, например 100.

Читаем переменную к.

Создаем еще один счетчик и присваиваем ему значение 1.

Далее опять же в цикле но на этот раз от 1 до размер нового массива (20 - счетчик) В цикле проверяем или ((потчний элемент массива> 0) и (следующий элемент больше 0) или (потчний элемент массива <0) и ( следующий элемент <0)) Если это условие выполняется то в новый массив записываем
if (condition)
begin
newArray [ourNewIndex] = oldArray [i];
inc (ourNewIndex)
newArray [ourNewIndex] = k;
end;
inc (ourNewIndex)

Затем создаем финальный цикл, в котором выводим элементы newArray. Но выводим их до тех пор пока не встретите первую элементы равный 100, то есть
while (newArray [i] <> 100);

Врятли вы что-то поймете из того что я написал но стирать жалко
rUs_LAN вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
две задачи turok2012 Фриланс 7 15.01.2012 13:49
две задачи vesper182 Паскаль, Turbo Pascal, PascalABC.NET 1 17.12.2011 07:56
Две задачи на с++ likos18 Помощь студентам 0 15.12.2011 23:30
две задачи metall-nya Паскаль, Turbo Pascal, PascalABC.NET 0 26.12.2010 04:17
две задачи на С++ ELL Помощь студентам 0 01.06.2008 01:28