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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 13.01.2011, 14:34   #1
MaKKeY
 
Регистрация: 13.01.2011
Сообщений: 6
По умолчанию Создание массива и сортировка его в сред TurboPascal

Здравствуйте, Уважаемые программисты и сисадмины. У меня проблемка с задачей на TP. Мне задали вот такую задачу: "Заданы стоимость различных деталей, выпускаемых мастерской, и их названия. Отсортируйте их по стоимости и алфавиту". Надо составить такую программу без всяких "выкрутасов" как сказал преподаватель, т.е. чем она "легче", тем лучше. Заранее Спасибо всем тем, кто откликнется. P.S. Программирование не моя основная специальность, поэтому не разбираюсь в ней.
MaKKeY вне форума Ответить с цитированием
Старый 13.01.2011, 19:06   #2
GetMax
Форумчанин
 
Регистрация: 21.10.2010
Сообщений: 588
По умолчанию

Проще всего ( по моему мнению) здесь использовать записи. Создать запись и отсортировать детали по стоимости можно так
Код:
Type
  Detali = record
                Nazv:String[20];
                Cena:Word
              End;
Var
  Mas:Array[1..3] of Detali;
  I,Kol:Byte;
  Buf:Word;
  Obmen:Boolean;
begin
   For i:=1 to 3 do With Mas[i] do
   Begin
     Write('Vvedite nazvanie ',i,' detali ');
     Readln(Nazv);
     Write('Vvedite cenu ',i,' detali ');
     Readln(Cena)
   End;
   Kol:=3;
   Repeat
     Obmen:=False;
     For i:=1 to Kol-1 do With Mas[i] do
     If Mas[i].Cena < Mas[i+1].Cena then
     Begin
       Buf:=Mas[i].Cena;
       Mas[i].Cena:=Mas[i+1].Cena;
       Mas[i+1].Cena:=Buf;
       Obmen:=True
     End;
     Dec(Kol)
   Until Not Obmen;
   For i:=1 to 3 do With Mas[i] do
   Writeln(Nazv,' ':25-Length(Nazv),Cena);
   Readln
End;
Сортировку деталей по алфавиту можно точно так же
Пользователь не знает, чего он хочет, пока не увидит то, что он получил.
Для благодарностей WMR R145235935681
GetMax вне форума Ответить с цитированием
Старый 13.01.2011, 21:43   #3
MaKKeY
 
Регистрация: 13.01.2011
Сообщений: 6
По умолчанию

Спасибо большое. Но вот в чем задачка то еще. Надо не использовать Запись, I, Kol:Byte; Buf:Word; Obmen:Boolean; Until, Dec, так как мы их "типа еще не проходили и не сможем составить программу и воспользоваться ей". Есть ли такая возможность составить такую программу? P.S. А возможно ли составить программу без использования массива?
Надо сделать как-то так: "Если Цена < Цена+1, то присваиваем g:=cena; cena:=cena+1; cena+1:=g". Вот что то типа того должно быть со слов преподавателя.

Последний раз редактировалось MaKKeY; 13.01.2011 в 21:45.
MaKKeY вне форума Ответить с цитированием
Старый 14.01.2011, 15:58   #4
MaKKeY
 
Регистрация: 13.01.2011
Сообщений: 6
По умолчанию

Код:
program LN;
uses crt;
var Massiv:Array [1..5,1..5] of string;
    i,n:integer;
    g:string;
    j:string;
begin
clrscr;
writeln ('Введите количество деталей');
readln (n);
for i:=1 to n do
 begin
writeln ('Введите название ',i,' детали');
readln (Massiv[i,1]);
writeln ('Введите стоимость ',i,' детали');
readln (Massiv[i,2]);
 end;
for i:=1 to n do
if Massiv[i,2]  > Massiv[i+1,2]  then
 begin
 g:=Massiv[i,2];
 Massiv[i,2]:=Massiv[i+1,2];
 Massiv[i+1,2]:=g;
end;
for i:=1 to n do
writeln(Massiv[i,2],'');
end.
Вот что получилось. у меня в сортировке что-то на мудрено. Не правильно сортирует. Проверьте, пожалуйста, и исправьте меня. По аналогичной схеме надо будет сделать сортировку по алфавиту, я прав?
MaKKeY вне форума Ответить с цитированием
Старый 14.01.2011, 16:04   #5
Mad_Cat
Made In USSR!
Старожил
 
Аватар для Mad_Cat
 
Регистрация: 01.09.2010
Сообщений: 3,657
По умолчанию

Цитата:
Не правильно сортирует
так как строка '100'< строки '20'
ты 2 массива обьяви один string второй real
real-массив -сортируй и при обмене меняй соответствующие зн-я в string-массиве
2GetMax
у тя меняет только цену а должен менять записи полностью

Код:
buf:detail;
{....}
       Buf:=Mas[i];
       Mas[i]:=Mas[i+1];
       Mas[i+1]:=Buf;
       Obmen:=True
     End;
{....}
"...В жизни я встречал друзей и врагов.В жизни много всего перевидал.Солнце тело мое жгло, ветер волосы трепал,но я смысла жизни так и не узнал..."
(c) Юрий Клинских aka "Хой"

Последний раз редактировалось Mad_Cat; 14.01.2011 в 16:27.
Mad_Cat вне форума Ответить с цитированием
Старый 14.01.2011, 16:19   #6
MaKKeY
 
Регистрация: 13.01.2011
Сообщений: 6
По умолчанию

Если не затруднит, то можешь написать как это будет выглядеть в самой сортировке?
MaKKeY вне форума Ответить с цитированием
Старый 14.01.2011, 16:30   #7
Mad_Cat
Made In USSR!
Старожил
 
Аватар для Mad_Cat
 
Регистрация: 01.09.2010
Сообщений: 3,657
По умолчанию

Код:
var buf:real;buf2:string;
{...}
Repeat
     Obmen:=False;
     For i:=1 to Kol-1 do 
     If Mas1[i] < Mas1[i+1]then
     Begin
       Buf:=Mas1[i];
       Mas1[i]:=Mas1[i+1];
       Mas1[i+1]:=Buf;
        Buf2:=Mas2[i];
       Mas2[i]:=Mas2[i+1];
       Mas2[i+1]:=Buf2;
       Obmen:=True
     End;
     Dec(Kol)
   Until Not Obmen;
{....}
"...В жизни я встречал друзей и врагов.В жизни много всего перевидал.Солнце тело мое жгло, ветер волосы трепал,но я смысла жизни так и не узнал..."
(c) Юрий Клинских aka "Хой"
Mad_Cat вне форума Ответить с цитированием
Старый 14.01.2011, 16:59   #8
MaKKeY
 
Регистрация: 13.01.2011
Сообщений: 6
По умолчанию

Спасибо большушее, сортировка работает, но я опять что то намудрил. Надо чтобы напротив каждого значение стоимости стояло его деталь, а у меня выводится по порядку, которые я ввел.
Код:
for i:=1 to n do
if Massiv[i,2]  > Massiv[i+1,2]  then
 begin
 Buf:=Massiv2[i];
 Massiv2[i]:=Massiv2[i+1];
 Massiv2[i+1]:=Buf;
 Buf2:=Massiv[i,2];
 Massiv[i,2]:=Massiv[i+1,2];
 Massiv[i+1,2]:=Buf2;
 Obmen:=True;
end;
for i:=1 to 6 do
writeln(Massiv[i,2],'',Massiv[i,1]);
end.
MaKKeY вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Сортировка массива методами предсортировки и слияния, и пирамидальная сортировка. lenny_24 Помощь студентам 2 17.04.2011 18:57
Запись массива с цифрами файл, и его загрузка Kycaka Общие вопросы C/C++ 4 08.06.2009 22:38
С его начать создание ИС Slavik Свободное общение 18 03.06.2009 01:21
Обработка массива записей. TurboPascal Nosferatu Помощь студентам 27 17.05.2009 20:29
функция вычисления сред.арифм и сред.геометр Demigoddess Общие вопросы C/C++ 2 15.05.2009 20:24