Четверг, 09.01.2025
Pascal 4 All
[ · Новые сообщения · Участники · Правила форума · Поиск · RSS ]

 

  • Страница 1 из 1
  • 1
Модератор форума: Seqular, Pavel  

помогите пожалйста с задачкой!
VilleДата: Среда, 09.04.2008, 00:29 | Сообщение # 1
Новичок
Группа: Пользователи
Сообщений: 7
Репутация: 0
Замечания: 0%
Статус: Offline
Дана последовательность из n вещественных чисел. Преобразовать ее по следующему правилу:
--все отрицательные элементы перенести в начало,а остальные в конец, при этом сохраняя исходное взаимное расположение как среди отрицательных, так среди остальных элементов!

помогите кто чем сможет..!ID

 
ymatemДата: Среда, 09.04.2008, 01:45 | Сообщение # 2
Знакомый
Группа: Пользователи
Сообщений: 13
Репутация: 2
Замечания: 0%
Статус: Offline
ну можно эту последовательность представить как одномерный массив, тогда можно просто провести сортировку методом пузырька

program sortirovka;
const
n=k; {вместо k вводится число, равное количеству чисел)
var
a:array[1..n] of real;
i, j, k: integer;
r: real;
begin
for i:=1 to n do
readln(a[i]);
for i:=1 to n-1 do
for j:=1 to to n-1 do
if a[j]>a[j+1] then
begin
r:=a[j+1];
a[j+1]:=a[j];
a[j]:=r;
end;
for k:=1 to n do
write(a[k],' ');
end.

 
AlexanderДата: Среда, 09.04.2008, 05:32 | Сообщение # 3
Всевышний
Группа: Модераторы
Сообщений: 475
Репутация: 16
Замечания: 0%
Статус: Offline
ymatem, что-то вы не то делаете. задание немного сложнее:
Quote
сохраняя исходное взаимное расположение как среди отрицательных, так среди остальных элементов

Т.е. примерно так:
Code
program sortirovka;
uses crt;
const n=9;
var
    a:array[1..n] of integer;
    i,j,k,z:byte;
    temp,temp2: integer;
begin
    TextAttr:=7;
    ClrScr;
    Randomize;
    for i:=1 to n do
       begin
          a[i]:=Random(19)-9;
          Write(a[i]:3);
       end;
    WriteLn;
    if a[1]<0 then
       j:=2
    else
       j:=1;
    for i:=2 to n do
       if a[i]<0 then
          begin
             if i=j then
                begin
                   Inc(j);
                   continue;
                end;
             temp:=a[j];
             a[j]:=a[i];
             Inc(j);
             for z:=i downto j+1 do
                begin
                   temp2:=a[z];
                   a[z]:=a[z-1];
                   a[z-1]:=temp;
                end;
             a[j]:=temp;
          end;
    for k:=1 to n do
       write(a[k]:3);
    readKey;
end.

Правда советую немного оптимизировать цикл, сразу видно, что это возможно, но как сразу не понять angry .


Скажем дружно- нафиг нужно!
 
PavelДата: Среда, 09.04.2008, 14:05 | Сообщение # 4
Приближенный
Группа: Модераторы
Сообщений: 210
Репутация: 17
Замечания: 0%
Статус: Offline
Решал я как-то эту задачку. Не буду проверять ваши варианты решения, но помню, что програма занимала около 40 строк. На выходных посмотрю на компе, так как он далеко от меня и будет еще один вариант решения. cool
 
PavelДата: Среда, 09.04.2008, 14:12 | Сообщение # 5
Приближенный
Группа: Модераторы
Сообщений: 210
Репутация: 17
Замечания: 0%
Статус: Offline
Во, вспомнил! Там цикл в цикле. Я вообщем на паре сейчас в ИВЦ, так что время будет, накатаю до конца недели, так как сейчас у нас профессор.
 
  • Страница 1 из 1
  • 1
Поиск:

Copyright MyCorp © 2025
Используются технологии uCoz
javascript:;" rel="nofollow" onclick="loginPopupForm(); return false;