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

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

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

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

Паскаль. Сортировка массивов

  • Автор темы Автор темы Arsis
  • Дата начала Дата начала

Arsis

Ученик
Регистрация
9 Июн 2010
Сообщения
3
Реакции
0
Баллы
0
Паскаль. Сортировка массивов

Помогите пожалуйста в решении задачи: Сформировать массив случайных чисел из 10 элементов и переставить в его начало все положительные элементы. вот моя наработка, но она не функционирует((( помогите пожалуйста:
program Lab;
uses Crt,Graph;
const
B=0; N=10; M=130;
var DriverVar,ModeVar,Ec:integer;
var A,Ar:array[1..N] of integer; MaxA,Ma:real;
D,I,J,H,Qr,Pr:integer;
F:text;
begin;
Assign(F,'Lab.rez');
Rewrite(F);
Clrscr;
Randomize;
Writeln(F,'Исходный массив');
for I:=1 to N do
begin
A:= Random(M)-30;
Write(F,A,' ');
end;
Writeln(F);
for I:=2 to N do
if Abs(A)>B then
begin
D:=A;
J:=I;
repeat
A[J]:=A[J-1];
J:=J-1;
until J<=1;
A[1]:=D;
end;
Writeln(F);
Writeln(F,'Массив после перестановки элементов');
for H:=1 to N do Write(F,A[H],' ');
Close(F);
MaxA:=0;
for I:=0 to N do
begin
if Abs(A)>MaxA then
MaxA:=Abs(A);
end;
DriverVar:=Detect;
InitGraph(DriverVar,ModeVar,'');
setlinestyle(0,0,3);
setbkcolor(1);
setcolor(8);
Line(10,GetMaxY div 2,GetMaxX-10,GetMaxY div 2);
Ma:=(GetMaxY div 2-40)/MaxA;
for I:=1 to N do
Ar:=-Round(A*Ma)+GetMaxY div 2;
setcolor(2);
for I:=1 to N do
begin
SetFillstyle(1,3);
Bar(I*20,Ar,I*20+10,GetMaxY div 2);
end;
setlinestyle(3,0,1);
setcolor(4);
Readln;
CloseGraph;
end.
 
Вот уж не думаю, что это ваша наработка.. Какой смысл тут использовать модуль Граф? Все решается гораздо проще - задаем массив; запускаем цикл по его элементам, ищем положительные: в случае обнаружения такого меняем его местами с одним из первых, заканчиваем цикл, и выводим результат. Все, никакой графики, модулей и файлов
 
Да, наработка не совсем мая, это просто напросто делалось по примеру. Граф, мне надо вывести график на экран. Вот вы говорите все гораздо проще в решении, напишите если не сложно как это выглядит.
 
так зачем график, объясните?
 
Чтобы графическую картинку получить. Нужна она, требуют ее, докучи
 
"Графическую картинку" чего, объясните толком наконец!
 
"Графическую картинку" чего, объясните толком наконец!
Ох, да по-моему просто чтобы была диаграмма - сначала все столбики вверх от горизонтальной (Y=0) оси, потом все вниз. Я это так понял.
 
Ну, в общем, сделал я вариант программки - разбирайтесь. Убрал лишнее, исправил ошибки, и вот:
Код:
program Lab;
uses Crt,Graph;
const
 N=10;
var
 DriverVar,ModeVar,Width,Dummy:integer;
 A:array[1..N] of integer;
 I,X,Y:integer;
 b:boolean;
 S:String;
begin;
 Clrscr;
 Randomize;
 Writeln('Initial array:');
 for I:=1 to N do
  begin
   A[I]:= Random(130)-30;
   Write(A[I],' ');
  end;
 Writeln;
 Repeat
  b:=true;
  for I:=1 to N-1 do
   If (A[I]<=0) and (A[I+1]>0) then
    begin
     Dummy:=A[I];
     A[I]:=A[I+1];
     A[I+1]:=Dummy;
     b:=false;
    end;
 Until b;
 Writeln('Array after the element rearrangement:');
 for I:=1 to N do Write(A[I],' ');
 WriteLn;
 WriteLn('Press "Enter" to continue...');
 ReadLn;

 DriverVar:=Detect;
 InitGraph(DriverVar,ModeVar,'');
 ClearDevice;
 SetLineStyle(SolidLn,0,ThickWidth);
 setbkcolor(1);
 setcolor(14);
 Line(40,10+10*Round((GetMaxY-20)/13),
         GetMaxX,10+10*Round((GetMaxY-20)/13));
 Line(40,10,40,10+13*Round((GetMaxY-20)/13));
 SetTextStyle(DefaultFont, HorizDir, 1);
 SetTextJustify(RightText,CenterText);
 For i:=0 to 13 do
  begin
   STR((i-3)*10:4,S);
   Y:=10+(13-i)*ROUND((GetMaxY-20)/13);
   Line(40,Y,34,Y);
   OutTextXY(30,Y,S);
  end;
 Width:=((GetMaxX-40) div N)-10;
 For i:=1 to N do
  begin
   SetFillstyle(1,2);
   X:=40+(((GetMaxX-40) div N) div 2)+((GetMaxX-40) div N)*(i-1);
   Y:=10+10*ROUND((GetMaxY-20)/13)-ROUND((GetMaxY-20)/130*A[i]);
   Bar(X-(Width div 2),10+10*ROUND((GetMaxY-20)/13),
       X+(Width div 2),Y);
  end;
ReadKey;
CloseGraph;
end.

Результат:
DDD01.webp
 
Назад
Сверху