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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 06.01.2009, 18:07   #1
**star**
Пользователь
 
Регистрация: 06.01.2009
Сообщений: 15
По умолчанию Паскаль.Массив

Есть программа,но нужно ее подкорректировать.

Заменить все элементы с 2 по p-1 на среднее арифметическое суммы всех цифр двух соседних элементов и упорядочить по возрастанию получившуюся последовательность.

Program pr18;
uses crt;
var mas:array [1..20] of integer;
i,j,p,s,min,nmin,x,cod:integer;
st,st1,st2:string;
sr:real;
procedure wod;
begin
clrscr;
for i:=1 to 20 do mas[i]:=random(100);
end;
procedure perevod;
begin
st:=copy(st1,j,1);
val(st,x,cod);
s:=s+x;
end;
procedure poisk;
begin for i:=2 to p-1 do
begin
s:=0;
str(mas[i-1],st1);
str (mas[i+1],st2);
for j:=1 to length(st1) do perevod;
for j:=1 to length(st2) do perevod;
sr:=s/(length(st1)+length(st2));
mas[i]:=round(sr);
end;
end;
procedure upor;
begin
for i:=1 to 20 do
begin
min:=mas[i];
nmin:=i;
for j:=i+1 to 20 do
if mas[i] < min then
begin
min:=mas[j];
nmin:=j;
end;
x:=mas[i];
mas[i]:=mas[nmin];
mas[nmin]:=x;
end;
end;
begin wod;
for i:=1 to 20 do
writeln('mas[',i,']=',mas[i]);

readln(p);
poisk;
for i:=1 to 20 do
begin
gotoxy(20,i);
writeln ('mas[',i,']=',mas[i]);
end;
upor;
for i:=1 to 20 do
begin
gotoxy(40,1);
writeln('mas[',1,')=',mas[i]);
end;
readln;
end.
**star** вне форума Ответить с цитированием
Старый 06.01.2009, 19:00   #2
profi
Участник клуба Подтвердите свой е-майл
 
Регистрация: 19.11.2007
Сообщений: 1,022
По умолчанию

Не знаю зачем ты так все сложно сделал и не понял твоего вопроса, но вот прога проще и понятнее на твою задачу:

Код:
uses crt;
var
a:array[1..50] of integer;
b:array[1..50] of real;
temp:real;
n,k,j,i,p,sum:integer;
begin clrscr; randomize;
write('Vvedite razmer:');
readln(p);
//заполняем массив
for i:=1 to p do
a[i]:=random(10)+1;
//выводим сформированный массив
for i:=2 to p-1 do
write ('a[',i,']=',a[i],', ');
// формируем новый массив средним арифм.суммы
j:=1;
for i:=2 to p-2 do
begin
b[j]:=(a[i]+a[i+1])/2;
inc(j);
end;
writeln;
//выводим сформированный массив
for i:=1 to j-1 do
write ('b[',i,']=',b[i],', ');
//сортируем новый массив
temp:=0;
for n:=1 to j-1 do
for i:=1 to j-n-1 do
if b[i]>b[i+1] then
begin
temp:=b[i];
b[i]:=b[i+1];
b[i+1]:=temp;
end;
writeln;
//выводим сортированый массив
for i:=1 to j-1 do
write ('b[',i,']=',b[i],', ');
end.

Последний раз редактировалось profi; 06.01.2009 в 19:12.
profi вне форума Ответить с цитированием
Старый 06.01.2009, 19:38   #3
**star**
Пользователь
 
Регистрация: 06.01.2009
Сообщений: 15
По умолчанию

Большое спасибо
**star** вне форума Ответить с цитированием
Старый 06.01.2009, 19:50   #4
puporev
Старожил
 
Регистрация: 13.10.2007
Сообщений: 2,740
По умолчанию

Вообще-то по условию нужно
Цитата:
среднее арифметическое суммы всех цифр двух соседних элементов
и автор правильно мыслил, лишь мысль свою не до конца оформил.
puporev вне форума Ответить с цитированием
Старый 06.01.2009, 20:12   #5
puporev
Старожил
 
Регистрация: 13.10.2007
Сообщений: 2,740
По умолчанию

Вот так надо решать эту задачу.
Код:
uses crt;
function SumCif(x:integer):byte;{функция для подсчета суммы цифр в числе}
var s,k:byte;
begin
s:=0;
while x>0 do
  begin
   k:=x mod 10;
   s:=s+k;
   x:=x div 10;
  end;
SumCif:=s;
end;
var a:array[1..20] of integer;
    b:array[1..20] of real;
    p,i,j:integer;
    bf:real;
begin
clrscr;
write('Razmer massiva p=');readln(p);
writeln('Vvedite ',p,' elementov massiva А:');
for i:=1 to p do
read(a[i]);
readln;
clrscr;
writeln('Massiv А:');
for i:=1 to p do
write(a[i],' ');
writeln;
writeln('Massiv B:');
b[1]:=a[1];b[p]:=a[p];
for i:=2 to p-1 do
b[i]:=(SumCif(a[i-1])+SumCif(a[i+1]))/2;
for i:=1 to p do
write(b[i]:6:2);
writeln;
writeln('Otsortirovannyj massiv B:');
for i:=1 to p-1 do
for j:=i+1 to p do
if b[i]>b[j] then
  begin
    bf:=b[i];
    b[i]:=b[j];
    b[j]:=bf;
  end;
for i:=1 to p do
write(b[i]:6:2);
readln
end.
puporev вне форума Ответить с цитированием
Старый 09.01.2009, 16:04   #6
**star**
Пользователь
 
Регистрация: 06.01.2009
Сообщений: 15
По умолчанию

Очень выручили,большое спасибо!
**star** вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Двумерный массив паскаль Альбиша Помощь студентам 3 14.12.2008 23:42
Массив. Паскаль Safary Помощь студентам 5 04.12.2008 18:58
ПАСКАЛЬ, одномерный массив (Kate) Помощь студентам 2 23.11.2008 15:06
Паскаль. Динамический массив KORT Паскаль, Turbo Pascal, PascalABC.NET 2 29.09.2007 23:08