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

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

Вернуться   Форум программистов > Delphi программирование > Паскаль, Turbo Pascal, PascalABC.NET
Регистрация

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 02.11.2008, 23:20   #1
TheKnyazz
Пользователь
 
Регистрация: 26.10.2008
Сообщений: 40
По умолчанию Склеивание массивов в паскале.

Добрый вечер, товарищи!
Прошу помочь с задачей по лабе, я разложил оную задачу на составные части, почти все части смог записать в процедурах, но столкнулся с проблемой, что я не знаю как склеивать массивы, и не знаю как решить условие №2.
Прошу взглянуть на условие

В одномерном массиве, состоящем из n вещественных элементов, вычис-
лить:
1) номер максимального по модулю элемента массива;
2) сумму элементов массива, расположенных после первого положитель-
ного элемента.
Преобразовать массив таким образом, чтобы сначала располагались все
элементы, целая часть которых лежит внутри отрезка [а, b], а потом – все ос-
тальные. Упорядочить каждую часть массива по возрастанию, используя алго-
ритм сортировки методом прямого обмена.

и на мой код

Program Laba5;
Const n=10;
Var a:array [1..n] of real;
b:array [1..n] of real;
c:array [1..n] of real;
i, imax, imin, count:real;
ibeg, iend:integer;

procedure maxnomer;{nahodim nomer max chisla}
var a:array [1..n] of real;
i,z:interger;
begin
for i:=1 to n do
if A[i]>A[i+1] then {sravnivaem}
begin
z:=i;
i:=i+1;
end
end;

procedure SAP;{summa posle pervogo polojitelnogo}
var a:array [1..n] of real;
i:integer;
S:=real;
begin
S:=0;
for i:=1 to n do
if A[i]>0 then
begin
S:=S+A[i];
i:=i+1;
end
end;

procedure otrezok; {opredeliaem prinadlejnost k otrezku a b}
var a:array [1..n] of real;
b:array [1..n] of real;
c:array [1..n] of real;
g,f:real;
i,j,d: integer;

begin {skaldiavem prinadlejashie v drugoy massiv}
j:=1;
d:=1;
for i:=1 to n do
if (A[i]>a) and (A[i]<b)
then
begin
B[j]:=A[i]
j:=j+1;
i:=i+1;
end;
else {ne prinadlejashie v 3 massiv}
begin
C[d]:=A[i];
i:=i+1;
d:=d+1;
end
end;

procedure tab2uporiad;
var s,q:integer;
b:array[1..j] of real;
r:real;
begin
for q:=j downto 2 do
for s:=1 to q-1 do
{сравнение двух соседних элементов}
if (b[s]>b[s+1]) then
begin
x:=b[s]; {перестановка элементов}
b[s]:=b[s+1] ;
b[s+1]:=r;
end
end;

procedure tab3uporiad;
var o,m:integer;
c:array[1..d] of real;
b:real;
begin
for m:=d downto 2 do
for o:=1 to m-1 do
{сравнение двух соседних элементов}
if (a[o]>a[o+1]) then
begin
x:=a[o]; {перестановка элементов}
a[o]:=a[o+1] ;
a[o+1]:=b;
end
end;

procedure skleyka;{skleivaem mas 3 i ms 2 v 4 preobrazovanniy i uporiadochenniy}

Begin
{Ввод значений элементов массива}
writeln ('Введите', n, 'элементов массива');
for i:=1 to n do
readln(a[i]);

end.

Исходник немного в пахабном виде(извиняюсь), но я еще не разобрался как мне лучше выводить ответ(((
TheKnyazz вне форума Ответить с цитированием
Старый 04.11.2008, 00:02   #2
puporev
Старожил
 
Регистрация: 13.10.2007
Сообщений: 2,740
По умолчанию

Чтобы массивы не склеивать, не надо их рвать. В этой задаче все делается в одном массиве. Если в чем не разберетесь, спрашивайте.
Код:
Program Laba5;
uses crt;
Const n=10;
type Tmas=array [1..n] of real;
Var m:Tmas;
    i,a,b,t:integer;
function Maxnomer(m:Tmas):integer;{nahodim nomer max chisla}
var j,jmax:integer;
    max:real;
begin
max:=abs(m[1]);jmax:=1;
for j:=1 to n do
if abs(m[j])>max then {sravnivaem}
  begin
   max:=abs(m[j]);
   jmax:=j;
  end;
Maxnomer:=jmax;
end;

function SAP(m:Tmas):real;{summa posle pervogo polojitelnogo}
var j,k:integer;
    s:real;
begin
k:=0;
for j:=1 to n do
if m[j]>0 then
   begin
    k:=j;
    break;
   end;
s:=0;
for j:=k+1 to n do
s:=s+m[j];
SAP:=s;
end;

procedure Otrezok(var m:Tmas;var p:integer;f,k:integer); {opredeliaem prinadlejnost k otrezku a b}
var l,j: integer;
    x:real;
begin {skaldiavem prinadlejashie v drugoy massiv}
p:=0;
for l:=1 to n do
if (trunc(m[l])>=f) and (trunc(m[l])<=k) then
  begin
    p:=p+1;
    x:=m[l];
    for j:=l downto p+1 do
    m[j]:=m[j-1];
    m[p]:=x;
  end;
end;

procedure Sort(p:integer; var m:Tmas);
var l,j:integer;
    r:real;
begin
for l:=1 to p-1 do
for j:=1 to p-1 do
{сравнение двух соседних элементов}
if (m[j]>m[j+1]) then
  begin
    r:=m[j]; {перестановка элементов}
    m[j]:=m[j+1] ;
    m[j+1]:=r;
  end;
for l:=p+1 to n-1 do
for j:=p+1 to n-1 do
{сравнение двух соседних элементов}
if (m[j]>m[j+1]) then
  begin
    r:=m[j]; {перестановка элементов}
    m[j]:=m[j+1] ;
    m[j+1]:=r;
  end;
end;

Begin
clrscr;
{Ввод значений элементов массива}
writeln ('Введите ',n,' элементов массива');
for i:=1 to n do
readln(m[i]);
clrscr;
writeln('Исходный массив:');
for i:=1 to n do
write(m[i]:6:2);
writeln;
writeln('Номер максимального по модулю элемента = ',Maxnomer(m));
writeln('Сумма элементов после первого положительного = ',SAP(m):0:2);
repeat
write('Введите меньшую целую часть числа :');
readln(a);
write('Введите большую целую часть числа :');
readln(b);
until (a>=0)and(b>a);
writeln('Преобразованный массив:');
Otrezok(m,t,a,b);
for i:=1 to n do
write(m[i]:6:2);
writeln;
writeln('Отсортированный массив:');
Sort(t,m);
for i:=1 to n do
write(m[i]:6:2);
readln
end.
puporev вне форума Ответить с цитированием
Старый 04.11.2008, 12:02   #3
TheKnyazz
Пользователь
 
Регистрация: 26.10.2008
Сообщений: 40
По умолчанию

мм, спасибо вам,большое...сколько ж я сделал ошибок... ну ничего, ща все проанализирую....то есть лучшим вариантом было искомый массив задать как тип, а потом уже используя этот тип преобразовывать введенное пользователем?
TheKnyazz вне форума Ответить с цитированием
Старый 04.11.2008, 12:46   #4
puporev
Старожил
 
Регистрация: 13.10.2007
Сообщений: 2,740
По умолчанию

Если в программе используются процедуры или функции, то в Паскале для передачи массива как параметра обязательно определить тип массива, иначе подпрограммы не будут работать.
puporev вне форума Ответить с цитированием
Старый 04.11.2008, 13:09   #5
TheKnyazz
Пользователь
 
Регистрация: 26.10.2008
Сообщений: 40
По умолчанию

Ага,теперь понял,спасибо!
TheKnyazz вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
пересечение массивов на С++ drakon803 Помощь студентам 4 09.12.2012 10:29
Склеивание звуков varvara16 Мультимедиа в Delphi 24 14.11.2008 18:24
склеивание форм blackstersl Общие вопросы Delphi 1 29.10.2008 19:16
Склеивание изображений Geracle Мультимедиа в Delphi 10 01.10.2008 16:45
обновление в блоге - СКЛЕИВАНИЕ ФАЙЛОВ Pblog Обсуждение статей 0 07.08.2007 12:41