Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: Задачка на Turbopascal
Форум программистов > Системное программирование > Другие
kimon
Здравствуйте уважаемые форумчане! Столкнулся с задачкой на турбо Паскале, как решать вобщем понятно, но не получается написать кодом... Помогите пожалуйста разобраться... smile.gif

Вот собственно задачка:
Заданы два массива. Создать один массив в котором вначале идут четные элементы, затем нечетные. Четные элементы нового массива упорядочить в порядке убывания.
Для отладки программы исходные массивы сформировать с помощью генератора случайных чисел.

Понятно, что для сортировки на четные\нечетные надо использовать X mod 2 =0, проблема только как эту прогу оформить на паскале. smile.gif

Помогите пожалуйста, буду очень благодарен. smile.gif
zubr
И чем эта задача интересна? Банальное вымогательство готового кода, причем старого как мир.
kimon
Ну а что же мне еще делать? Есть большой учебник по паскалю, прочитал все о массивах, но нигде не нашел даже как из двух массивов сделать один. Да и не требую я банально код, я прошу помочь мне, может кто подскажет каким образом правильно написать(например то же преобразование двух массивов в один), ато в книгах этого нет, и остается только на форумах учиться...
Barmutik
Ну есть два массива .. создать третий и в него поэлементно поместить элементы данных Вам двух массивов .. что конкретно сложно если Вы уже прочитали про массивы ?
kimon
ок, вот что я сделал, только что-то там не то...


Program massiv;
uses crt;
var
a:array[1..10] of integer;
b:array[1..10] of integer;
c:array[1..20] of integer;
I,H,G,n,m:integer;

begin
writeln('Ввести размер 1-го массива:');
readln(n);
for I:1 to n do
a[I]:=random(100);
for I:=1 to n do
writeln(a[I]);

writeln('Ввести размер 2-го массива:');
readln(m);
for G:1 to m do
b[G]:=random(100);
for G:=1 to m do
writeln(b[G]);

writeln('Третий массив:');
for Р:1 to 20 do
c[H]:=a[I]+b[G];
for H:=1 to 20 do
writeln(c[H]);

end.


Что я не так сделал?
Barmutik
Вот этот кусоче кода совсем мягко сказать не верен .. до него всё более менее верно .. не считая того что если Вы введёт размерность первого или второго массива больше 10 .. то всё упадёт..

Начиная с него написано непонятно что...

writeln('Третий массив:');
for Р:1 to 20 do
c[H]:=a[I]+b[G];
for H:=1 to 20 do
writeln(c[H]);
kimon
Да, я и сам понимаю...
Я так понял надо заполнить массив с[H] элементами a[1],a[2]... b[10]. Я правильно понимаю? Пытался и так и сяк, но не пойму как эти все элементы перечислить. Подскажите пожалуйста, как их перечислить...
Пробовал так:
с[H]:=a[1],a[2],a[3], и т.д. но ничего не вышло...
Barmutik
Хммм.. 10 строчками Выше у Вас удачно получилось их перечислить и распечатать с помощью:

for I:=1 to n do
writeln(a[I]);


а тут Вы вдруг забыли как к ним обращаться ..?
kimon
Цитата(Barmutik @ 22:03:2007, 21:11 )
а тут Вы вдруг забыли как к ним обращаться ..?
*


Я просто не пойму никак... smile.gif
Вот так попробовал, но что-то не то:

for H:=a[I] to b[G] do
writeln(c[H]);


Как же их перечислить?
Barmutik
Ну явно не то ... обращаться номера записанного в I-й элемент массива А до номера записанного в G-й элемент массива B ...

Создаётся впечатление ... что Вы не совсем вообще понимаете что Вы делаете cool.gif

Может стоит прочитать главу о работе с массивами ещё раз ? blink.gif
kimon
Цитата
Создаётся впечатление ... что Вы не совсем вообще понимаете что Вы делаете
Может стоит прочитать главу о работе с массивами ещё раз ?


На самом деле просто не хватает информации и практики... Есть большой учебник турбо паскаля(автор Немнюгин), там про массивы написано, но очень кратко и непонятно. Я еще со школы немного помню массивы, но там задачки были намного примитивнее. Я разобрался как заполнить массив по любой данной формуле, а заполнить массив двумя другими не хватает знаний...
Я бы мог например заказать у кого-нибудь эту задачку за деньги, но дело не в деньгах, просто хочется самому до всего дойти... Был бы очень признателен если бы кто-нибудь мне в этом помог. smile.gif

Пытаюсь так делать, но снова что-то не то..:

for H:=a[1] to b[10] do
kimon
Вот что еще надумал:

for q:=a[1] to a[10] do
  for w:=b[1] to b[10] do
writeln{c[q,w]};


Есть хоть правильные мысли?
Hetman
Иногда помогает, если попытаться объяснить самому себе задачу буквально "на пальцах" ничего не опуская и продразумевая, то есть следовать компьютерной логике - мелочей не бывает.
например, вместо "что бы добраться из пункта А в пункт Б, нужно сеть в машину и доехать".
но для этого ведь сначало надо так: "
...
...1. достать ключь
...2. вставить в замок зажигания
...3. включить ключ на старт
...4. Если машина завелась - пристегнутся, если нет повторить пункт 3"
и далее в таком духе.

Цитата(kimon @ 22:03:2007, 14:15 )
writeln('Третий массив:');
for Р:1 to 20 do
c[H]:=a[I]+b[G];
for H:=1 to 20 do
writeln(c[H]);
*


что ты здесь хотел сделать blink.gif ?

кстати для того что бы отсортировать элементы по возрастанию (убыванию) существует несколько способов - прочитай может пригодится Нажмите для просмотра прикрепленного файла
~RedFox~
Цитата(kimon @ 21:03:2007, 13:43 )
Заданы два массива. Создать один массив в котором вначале идут четные элементы, затем нечетные.
*


Несколько непонятно условие задачи. Как должен формироваться третий массив? Заполняться четными элементами 1го массива, затем четными элементами 2го, а потом нечетными - 1го и 2 го? Или - четные элементы 1го, нечетные элементы 1го, четные элементы 2го, нечетные элементы 2го? А может вообще, два массива просто объединяются в третьем, а потом уже четные элементы третьего выносятся в начало массива, а нечетные - в конец? blink.gif
kimon
Цитата(~RedFox~ @ 25:03:2007, 01:44 )
Несколько непонятно условие задачи. Как должен формироваться третий массив? Заполняться четными элементами 1го массива, затем четными элементами 2го, а потом нечетными - 1го и 2 го? Или - четные элементы 1го, нечетные элементы 1го, четные элементы 2го, нечетные элементы 2го? А может вообще, два массива просто объединяются в третьем, а потом уже четные элементы третьего выносятся в начало массива, а нечетные - в конец?
*


Да, надо сначала объединить два массива в третий, а потом уже его сортировать...
~RedFox~
Так загвоздка в объединении массивов? smile.gif
Так это будет выглядеть:
for i:=1 to n do
    c[i]:=a[i];
for i:=1+n to m+n do
    c[i]:=b[i];


А на JS, например, все намного проще biggrin.gif :
c=a.concat(b)
kimon
Цитата(~RedFox~ @ 25:03:2007, 11:38 )
Так это будет выглядеть:
*


Спасибо за подсказку, только почему-то у меня не получается массив этот вывести...
Подогнал под свой случай, получилось так:

for H:=1 to n do
c[H]:=a[H];
for H:=1+n to m+n do
c[H]:=b[H];
writeln(c[H]);

Так должно быть? Или я опять туплю? smile.gif
~RedFox~
Массив поэлементно надо выводить:
for H:=1 to m+n do
    writeln(c[H]);
kimon
Хм... Никак.. smile.gif Что-то у меня третий массив получается состоит из первого, а вместо второго там совсем другие числа... Т.е. вторым массивом не получается заполнить..
Вот какой у меня код вышел для третьего массива:

...
for H:= to n do
c[H]:=a[H];
  for H:=1+n to n+m do
c[H]:=b[H];
  for H:=1 to n+m do
writeln(c[H]);
...
S-haman
код я б реализовал следующим образом мне кажеться быстрее будет
for h:=1 to n do
begin
c[h]:=a[h];
writeln(c[h]);
end;
for h:=n to n+m do
begin
c[h]:=b[h];
writeln(c[h]);
end;
kimon
smile.gif Хоть убивайте меня, но что-то не то... Элементами массива b не хочет заполняться...

Вот привожу полный код программы, посмотрите пожалуйста, может я до этого где-то накосячил:
Program massiv;
uses crt;
var
  a:array[1..100] of integer;
  b:array[1..100] of integer;
  c:array[1..200] of integer;
   I,G,H,n,m:integer;

begin
randomize;
clrscr;

  writeln('Введите размер первого массива');
  readln(n);
   for I:=1 to n do
   a[I]:=random(100);
   for I:=1 to n do
  writeln(a[I]);

  writeln('Введите размер второго массива:');
   readln(m);
  for G:=1 to m do
  b[G]:=random(100);
   for G:=1 to m do
  writeln(b[G]);

  writeln('Третий массив:');
  for H:=1 to n do
   begin
   c[H]:=a[H];
   writeln(c[H]);
   end;
  for H:=n to n+m do
   begin
   c[H]:=b[H];
   writeln(c[H]);
   end;

  Repeat Until Keypressed;
end.


Причем надо учитывать что с новым массивом еще придется работать, т.е. сортировать.
grigsoft
Детский сад прям smile.gif
Не забываем, что границы массива В - от 1 до м. А ты к нему обращаешься от n до n+m. Так что лучше так:
  for H:=1 to m do
   begin
   c[n+H]:=b[H];
   writeln(c[n+H]);
   end;
~RedFox~
Точняк, это я спросонья ступил:
Цитата(~RedFox~ @ 25:03:2007, 11:38 )
for i:=1 to n do
    c[i]:=a[i];
for i:=1+n to m+n do
    c[i]:=b[i];

*


Правильно будет так:
for i:=1 to n do
    c[i]:=a[i];
for i:=1 to m do
    c[i+n]:=b[i];
kimon
Спасибо, щас вроде похоже на правду. smile.gif Только вот сразу вопросик, а как теперь с эти массивом работать? Всмысле как мне к нему обратиться чтобы отсортировать?
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Форум IP.Board © 2001-2008 IPS, Inc.