Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Центр помощи > [Pascal] Создание массива из элементов других


Автор: Valafar 12.10.2008, 12:08
Даны два массива X(N) и Y(M). Сформировать массив Z(N+M) из положительных элементов массивов X и Y. Если положительных элементов меньше N+M, то оставшимся элементам массива Z присвоить значение +1.

Автор: mr.Anderson 12.10.2008, 16:23
Вот вариант решения.
Код

program RandomArrays;

function retRandom(): Integer; //вернет число от -50 до +50
const
 val = 100;
var
 condition: Integer;
 res: Integer;
begin
 res := random(val)+1; //1..100
 res := res div 2; //1..50

 condition := random(2); //0..1
 if (condition=1) then
  res := -res;

 Result := res;
end;

const
 n = 5;
 m = 10;

var
 x: Array [1..n] of Integer;
 y: Array [1..m] of Integer;
 z: Array [1..(n+m)] of Integer;
 i: Integer;
 c: Integer;

begin
 randomize();

 write('X : ');
 for i:=1 to n do
 begin
  x[i] := retRandom();
  write(x[i], ' ');
 end;

 writeln;
 write('Y : ');
 for i:=1 to m do
 begin
  y[i] := retRandom();
  write(y[i], ' ');
 end;

 c := 1;

 for i:=1 to n do
  if (x[i] > 0) then
  begin
   z[c] := x[i];

   inc(c);
  end;

 for i:=1 to m do
  if (y[i] > 0) then
  begin
   z[c] := y[i];

   inc(c);
  end;

 if (c<(n+m)) then
  for i:=c to (n+m) do
   z[i] := 1;

 writeln;
 write('Z : ');
 for i:=1 to (n+m) do
  write(z[i], ' ');

 readln;
end.


Добавлено через 2 минуты и 42 секунды
ЗЫ не пугайтесь, что оно такое здоровое, тут львиная доля кода - это вариация заполнения массивов. Само решение сидит в строках 49-69.

Автор: THandle 12.10.2008, 16:31
Код

function retRandom(): Integer; //вернет число от -50 до +50
const
 val = 100;
var
 condition: Integer;
 res: Integer;
begin
 res := random(val)+1; //1..100
 res := res div 2; //1..50
 condition := random(2); //0..1
 if (condition=1) then
  res := -res;
 Result := res;
end;


Это зачем такой страх то? smile 

http://forum.vingrad.ru/forum/topic-196567/hl/random/index.html

Автор: mr.Anderson 12.10.2008, 16:38
THandle, ну не знал я про эту функцию. smile Тогда да, код правим. Сейчас...

Добавлено @ 16:42
Код

program RandomArrays;
uses Math;
const
 n = 5;
 m = 10;
 range = 100;
var
 x: Array [1..n] of Integer;
 y: Array [1..m] of Integer;
 z: Array [1..(n+m)] of Integer;
 i: Integer;
 c: Integer;
begin
 randomize();
 write('X : ');
 for i:=1 to n do
 begin
  x[i] := RandomRange(-range, range);
  write(x[i], ' ');
 end;

 writeln;
 write('Y : ');
 for i:=1 to m do
 begin
  y[i] := RandomRange(-range, range);
  write(y[i], ' ');
 end;

 c := 1;

 for i:=1 to n do
  if (x[i] > 0) then
  begin
   z[c] := x[i];
   inc(c);
  end;

 for i:=1 to m do
  if (y[i] > 0) then
  begin
   z[c] := y[i];
   inc(c);
  end;

 if (c<(n+m)) then
  for i:=c to (n+m) do
   z[i] := 1;

 writeln;
 write('Z : ');
 for i:=1 to (n+m) do
  write(z[i], ' ');
 readln;
end.

Автор: THandle 12.10.2008, 16:47
Цитата(mr.Anderson @  12.10.2008,  17:38 Найти цитируемый пост)
inc©;


Кхм... Название другое придумай. А то после копипаста с форума пахать не будет smile 

Автор: mr.Anderson 12.10.2008, 16:49
THandle, тьфу... smile У копипаста с форума есть свои проблемы...

Автор: THandle 12.10.2008, 16:50
mr.Anderson, ты кстати решение то проверь smile Оно то и в Делфе пахать не будет, а в Паскале тем более smile

Автор: mr.Anderson 12.10.2008, 16:53
THandle, да куда ж оно денется. smile 

Автор: Rrader 12.10.2008, 17:01
Прошу прощения за оффтоп, не удержался.

mr.Anderson, не торопись выкладывать решения, не проверив их тщательно. И если ты не приучен писать правильно оформленный код, то хорошего программиста из тебя не станет, за это просто увольняют из любой серьезной конторы smile 

Вот критерии, по которым чаще всего оценивают код при приеме на работу:

1)Commenting
2)Code Neatness  smile 
3)White Spaces  smile 
4)Algorithms
5)Naming
6)Range\Parameters Check
7)Memory Leaks
8)Language Mastery

Паскаль проще всего оформлять... Один из самых удобочитаемых кодов, всего два отступа. С++ - 4 отступа, Asm - 8 отступов.

Автор: mr.Anderson 12.10.2008, 17:05
Rrader, первое решение работало нормально, дальнейшие модификации пошли уже чисто в плане улучшения кода.

Из списка не понял только Code Neatness.

Автор: Rrader 12.10.2008, 17:10
Цитата(mr.Anderson @  13.10.2008,  00:05 Найти цитируемый пост)
Rrader, первое решение работало нормально, дальнейшие модификации пошли уже чисто в плане улучшения кода.

Никто не спорит, что работало нормально.

Вот функция для проверки, является ли строка числом или нет:
Код

function IsIntNumber(const S: String): Boolean;
begin
  Result := StringReplace(StringReplace(
    StringReplace(StringReplace(StringReplace(StringReplace(
    StringReplace(StringReplace(StringReplace(StringReplace(S,
    '0', '', [rfReplaceAll]), '1', '', [rfReplaceAll]), '2', '',
    [rfReplaceAll]), '3', '', [rfReplaceAll]), '4', '', [rfReplaceAll]),
    '5', '', [rfReplaceAll]), '6', '', [rfReplaceAll]), '7', '',
    [rfReplaceAll]), '8', '', [rfReplaceAll]), '9', '', [rfReplaceAll]) = '';
end;

Она тоже работает нормально.

Автор: mr.Anderson 12.10.2008, 17:17
Rrader, согласен. Буду учиться дальше. smile 

Автор: Valafar 12.10.2008, 20:51
Отличный форум, благодарю за помощь

Автор: volvo877 13.10.2008, 11:28
Цитата(mr.Anderson @  12.10.2008,  16:05 Найти цитируемый пост)
первое решение работало нормально
Некомпилирующийся код не может работать нормально, согласись? Не путайте уже в конце концов Дельфи с Паскалем... Нет в Паскале Result... Нет и никогда не было. Точка...

И пустой список параметров никогда Паскалем не поддерживался... Как результат - минимум две правки для того, чтобы программа ХОТЯ БЫ откомпилировалась. Так что не надо про "работающий код". Работал он у тебя в Дельфях, а топикстартер просил на Паскале... Это совсем не одно и то же...

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)