Задачка на Turbopascal

  • Автор темы kimon
  • Дата начала
Статус
Закрыто для дальнейших ответов.
K

kimon

#1
Здравствуйте уважаемые форумчане! Столкнулся с задачкой на турбо Паскале, как решать вобщем понятно, но не получается написать кодом... Помогите пожалуйста разобраться... ;)

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

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

Помогите пожалуйста, буду очень благодарен. :)
 
Z

zubr

#2
И чем эта задача интересна? Банальное вымогательство готового кода, причем старого как мир.
 
K

kimon

#3
Ну а что же мне еще делать? Есть большой учебник по паскалю, прочитал все о массивах, но нигде не нашел даже как из двух массивов сделать один. Да и не требую я банально код, я прошу помочь мне, может кто подскажет каким образом правильно написать(например то же преобразование двух массивов в один), ато в книгах этого нет, и остается только на форумах учиться...
 
B

Barmutik

#4
Ну есть два массива .. создать третий и в него поэлементно поместить элементы данных Вам двух массивов .. что конкретно сложно если Вы уже прочитали про массивы ?
 
K

kimon

#5
ок, вот что я сделал, только что-то там не то...


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:=random(100);
for I:=1 to n do
writeln(a);

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+b[G];
for H:=1 to 20 do
writeln(c[H]);

end.


Что я не так сделал?
 
B

Barmutik

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

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

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

kimon

#7
Да, я и сам понимаю...
Я так понял надо заполнить массив с[H] элементами a[1],a[2]... b[10]. Я правильно понимаю? Пытался и так и сяк, но не пойму как эти все элементы перечислить. Подскажите пожалуйста, как их перечислить...
Пробовал так:
с[H]:=a[1],a[2],a[3], и т.д. но ничего не вышло...
 
B

Barmutik

#8
Хммм.. 10 строчками Выше у Вас удачно получилось их перечислить и распечатать с помощью:

Код:
for I:=1 to n do
writeln(a[I]);
а тут Вы вдруг забыли как к ним обращаться ..?
 
K

kimon

#9
<!--QuoteBegin-Barmutik+22:03:2007, 21:11 -->
<span class="vbquote">(Barmutik @ 22:03:2007, 21:11 )</span><!--QuoteEBegin-->а тут Вы вдруг забыли как к ним обращаться ..?
[snapback]59864" rel="nofollow" target="_blank[/snapback]​
[/quote]

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

Код:
for H:=a[I] to b[G] do
writeln(c[H]);
Как же их перечислить?
 
B

Barmutik

#10
Ну явно не то ... обращаться номера записанного в I-й элемент массива А до номера записанного в G-й элемент массива B ...

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

Может стоит прочитать главу о работе с массивами ещё раз ? :angry:
 
K

kimon

#11
Создаётся впечатление ... что Вы не совсем вообще понимаете что Вы делаете
Может стоит прочитать главу о работе с массивами ещё раз ?
На самом деле просто не хватает информации и практики... Есть большой учебник турбо паскаля(автор Немнюгин), там про массивы написано, но очень кратко и непонятно. Я еще со школы немного помню массивы, но там задачки были намного примитивнее. Я разобрался как заполнить массив по любой данной формуле, а заполнить массив двумя другими не хватает знаний...
Я бы мог например заказать у кого-нибудь эту задачку за деньги, но дело не в деньгах, просто хочется самому до всего дойти... Был бы очень признателен если бы кто-нибудь мне в этом помог. :D

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

Код:
for H:=a[1] to b[10] do
 
K

kimon

#12
Вот что еще надумал:

Код:
for q:=a[1] to a[10] do
for w:=b[1] to b[10] do
writeln{c[q,w]};
Есть хоть правильные мысли?
 
H

Hetman

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

<!--QuoteBegin-kimon+22:03:2007, 14:15 -->
<span class="vbquote">(kimon @ 22:03:2007, 14:15 )</span><!--QuoteEBegin-->writeln('Третий массив:');
for Р:1 to 20 do
c[H]:=a+b[G];
for H:=1 to 20 do
writeln(c[H]);
[snapback]59832" rel="nofollow" target="_blank[/snapback]​
[/quote]

что ты здесь хотел сделать :) ?

кстати для того что бы отсортировать элементы по возрастанию (убыванию) существует несколько способов - прочитай может пригодится Посмотреть вложение SORT.rar
 

Вложения

  • 459.2 КБ Просмотры: 112
R

~RedFox~

#14
<!--QuoteBegin-kimon+21:03:2007, 13:43 -->
<span class="vbquote">(kimon @ 21:03:2007, 13:43 )</span><!--QuoteEBegin-->Заданы два массива. Создать один массив в котором вначале идут четные элементы, затем нечетные.
[snapback]59718" rel="nofollow" target="_blank[/snapback]​
[/quote]

Несколько непонятно условие задачи. Как должен формироваться третий массив? Заполняться четными элементами 1го массива, затем четными элементами 2го, а потом нечетными - 1го и 2 го? Или - четные элементы 1го, нечетные элементы 1го, четные элементы 2го, нечетные элементы 2го? А может вообще, два массива просто объединяются в третьем, а потом уже четные элементы третьего выносятся в начало массива, а нечетные - в конец? :)
 
K

kimon

#15
<!--QuoteBegin-~RedFox~+25:03:2007, 01:44 -->
<span class="vbquote">(~RedFox~ @ 25:03:2007, 01:44 )</span><!--QuoteEBegin-->Несколько непонятно условие задачи. Как должен формироваться третий массив? Заполняться четными элементами 1го массива, затем четными элементами 2го, а потом нечетными - 1го и 2 го? Или - четные элементы 1го, нечетные элементы 1го, четные элементы 2го, нечетные элементы 2го? А может вообще, два массива просто объединяются в третьем, а потом уже четные элементы третьего выносятся в начало массива, а нечетные - в конец?
[snapback]60051" rel="nofollow" target="_blank[/snapback]​
[/quote]

Да, надо сначала объединить два массива в третий, а потом уже его сортировать...
 
R

~RedFox~

#16
Так загвоздка в объединении массивов? :)
Так это будет выглядеть:
Код:
for i:=1 to n do
c[i]:=a[i];
for i:=1+n to m+n do
c[i]:=b[i];
А на JS, например, все намного проще :huh: :
Код:
c=a.concat(b)
 
K

kimon

#17
<!--QuoteBegin-~RedFox~+25:03:2007, 11:38 -->
<span class="vbquote">(~RedFox~ @ 25:03:2007, 11:38 )</span><!--QuoteEBegin-->Так это будет выглядеть:
[snapback]60063" rel="nofollow" target="_blank[/snapback]​
[/quote]

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

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]);

Так должно быть? Или я опять туплю? :)
 
R

~RedFox~

#18
Массив поэлементно надо выводить:
Код:
for H:=1 to m+n do
writeln(c[H]);
 
K

kimon

#19
Хм... Никак.. <_< Что-то у меня третий массив получается состоит из первого, а вместо второго там совсем другие числа... Т.е. вторым массивом не получается заполнить..
Вот какой у меня код вышел для третьего массива:

Код:
...
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

S-haman

#20
код я б реализовал следующим образом мне кажеться быстрее будет
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;
 
Статус
Закрыто для дальнейших ответов.