• Добро пожаловать на компьютерный форум Tehnari.ru. Здесь разбираемся с проблемами ПК и ноутбуков: Windows, драйверы, «железо», сборка и апгрейд, софт и безопасность. Форум работает много лет, сейчас он переехал на новый движок, но старые темы и аккаунты мы постарались сохранить максимально аккуратно.

    Форум не связан с магазинами и сервисами – мы ничего не продаём и не даём «рекламу под видом совета». Отвечают обычные участники и модераторы, которые следят за порядком и качеством подсказок.

    Если вы у нас впервые, загляните на страницу о проекте и правила – там коротко описано, как задать вопрос так, чтобы быстро получить ответ. Чтобы создавать темы и писать сообщения, сначала зарегистрируйтесь, а затем войдите под своим логином.

    Не знаете, с чего начать? Создайте тему с описанием проблемы – подскажем и при необходимости перенесём её в подходящий раздел.
    Задать вопрос Новые сообщения Как правильно спросить
    Если пришли по старой ссылке со старого Tehnari.ru – вы на нужном месте, просто продолжайте обсуждение.

Помогите, пожалуйста, с размерностью массива

Serega61

Ученик
Регистрация
23 Дек 2012
Сообщения
5
Реакции
0
Баллы
0
Помогите, пожалуйста, с размерностью массива

Дан массив b(n). Переписать в массив c(n) положительные элементы массива b(n) умноженные на 5. Затем упорядочить методом "пузырька" по возрастанию новый массив. Найти общее количество одинаковых элементов в упорядоченном массиве. Как правильно определить размерность массива после перестановки? Объясните, пожалуйста!!!

program sort_3;
const n=10;
var b: array[1..n] of real;
c: array[1..n] of real;
k,i: integer; temp: real; flag: boolean;
begin
writeln('Массив В');
randomize;
for i:=1 to n do
begin
b:=random(100)-50;
write(b:4:0);
end;
writeln;
writeln('Массив С');
k:=1;
for i:=1 to n do
begin
if b>0 then
begin
c[k]:=b*5;
write('c[',k,']=',c[k],' ');
k:=k+1;
end;
end;
writeln;
repeat
flag:=true;
for i:=1 to k-2 do
begin
if c>c[i+1] then
begin
temp:=c;
c:=c[i+1];
c[i+1]:=temp;
flag:=false;
end;
end;
until flag;
writeln('После сортировки');
for i:=1 to k-2 do
write(' ',c);
writeln
end.


Результат:
Массив В
38 1 0 -31 -34 42 41 -30 -28 -17
Массив С
c[1]=190 c[2]=5 c[3]=210 c[4]=205
После сортировки
5 190 205
 
Объясните, пожалуйста!!!
Объясняю. В цикле вывода массива С верхнюю границу нужно поставить не k-2, а k-1. Кроме того, совершенно непонятно, за каким лешим Вы объявляете формат элементов массива вещественным (real), а не целым, тем более, что генерируете Вы целые числа и формат вывода даете с обрезанием дробной части. Смысл?
Вот Ваш код с исправлениями:
Код:
const
 n=10;
var
 b,c: array[1..n] of integer;
 k,i,j,temp: integer;
 flag:boolean;
begin
 writeln('Массив В');
 randomize;
 for i:=1 to n do
 begin
  b[i]:=random(100)-50;
  write(b[i]:4);
 end;
 writeln;
 writeln('Массив С');
 k:=1;
 for i:=1 to n do
  begin
   if b[i]>0 then
    begin
     c[k]:=b[i]*5;
     write('c[',k,']=',c[k],' ');
     k:=k+1;
    end;
  end;
 writeln;
 repeat
  flag:=true;
  for i:=1 to k-2 do
   begin
    if c[i]>c[i+1] then
     begin
      temp:=c[i];
      c[i]:=c[i+1];
      c[i+1]:=temp;
      flag:=false;
     end;
   end;
 until flag;
 writeln('После сортировки');
 for i:=1 to k-1 do
  write(c[i]:4);
 readln
end.
 
Спасибо!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
 
Назад
Сверху