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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 23.06.2011, 14:51   #1
Novenkaja
Форумчанин
 
Регистрация: 29.12.2010
Сообщений: 176
Восклицание Доделать в Паскале задание на массив

Добрый день всем программистам.

Мне очень нужна ваша помощь.
Мне немного нехватает пунктов по предмету, преподователь вечно к чему то придерается и ей что-то не нравится.Вот дан код моего задания,в нём у меня выполнены все пункты, но она говорит, что не указаны максимальные размеры массива(т.е. не выполнен 2-ой пункт задания)

Поэтому вот условие задания и мой код.Прошу помощи доделать его(т.е. дописатьв него ту часть,которая будет отвечать за 2-ой пункт насчёт этих максимальных размеров массива)

Создать программу, которая указывает (находит, определяет) время образования массива чисел, типа REAL :

1. Сравнение производит тремя методами : «разделяй и властвуй», сортировка Шелла, методом вставки (скорее всего подразумеваются методы сортировки обменом, выбором и вставкой);
2. Размеры массивов – максимально возможные;
3. Начальные значения создать (образовать), используя генератор случайных чисел, но для всех трех методов (или же ...во всех трех методах...) содержание массивов должно быть одинаковым (должно совпадать);
4. Упорядочение производить созданому, упорядоченному и упорядоченному «задом наперед» (наверное подразумевается – от большего к меньшему) массивам;
5. Полученные время (миллисекунды) сохранять в массиве;
6. Результаты перевести в секунды и сохранить в форме таблицы.

Код:
program uzd_7;
uses windows; 
const Max=1000;                      {otvet na 2-ij punkt}
type TArray=array[1..max] of real;  {glavnoe uslovie tip-real}
var a,b,c:TArray;
h,z:Integer;
T:array[1..3,1..3] of real;


procedure Write1(var item: TArray; count:integer);
var i:Integer;
begin
 for i:=1 to count do
 write(item[i],'  ');
end;

procedure Select(var item: TArray; count:integer);   {proceduri select/select2,change/change 2 i dr-ie eto 4-ij punkt }
var
  i, j, k: integer;
  x: real;
begin
  for i := 1 to count-1 do
    begin
      k := i;
      x := item[i];
      for j := i+1 to count do
      if item[j]<x then
        begin
          k := j;
          x := item[j];
        end;
      item[k] := item[i];
      item[i] := x;                 {x-vspomogatelnaja peremennaja}
         end;
end;
Procedure Change(Var  item: TArray; count:integer);
Var
  i,j:integer;
  x:real;
Begin
     for i:=1 to count-1 do
     for j:=i+1 to count do
     if item[i]>item[j] then
     begin
       x:=item[i];
       item[i]:=item[j];
       item[j]:=x;
      end;
End;

procedure Insert(Var  item: TArray; count:integer);
var i, j:integer;buf:real;
begin
for i:=2 to count do     {count-koli4estvo elementov v massive}
begin
buf:=item[i];
j:=i-1;
while (j>=1) and (item[j]>buf) do
begin
item[j+1]:=item[j];
j:=j-1;
end;
item[j+1]:=buf;               {buf-vspomogatelnaja peremennaja}
end;
end ;

procedure Select2(var item: TArray; count:integer);
var
  i, j, k: integer;
  x: real;
begin
  for i := 1 to count-1 do
    begin
      k := i;
      x := item[i];
      for j := i+1 to count do
      if item[j]>x then
        begin
          k := j;
          x := item[j];
        end;
      item[k] := item[i];
      item[i] := x;
         end;
end;


Procedure Change2(Var  item: TArray; count:integer);
Var
  i,j:integer;
  x:real;
Begin
     for i:=1 to count-1 do
     for j:=i+1 to count do
     if item[i]<item[j] then
     begin
       x:=item[i];
       item[i]:=item[j];
       item[j]:=x;
      end;
End;


procedure Insert2(Var  item: TArray; count:integer);
var i, j:integer;
 buf:real;
begin
for i:=2 to count do
begin
buf:=item[i];
j:=i-1;
while (j>=1) and (item[j]<buf) do
begin
item[j+1]:=item[j];
j:=j-1;
end;
item[j+1]:=buf;
end;
end;
begin
 Randomize;
 For h:=1 to Max do        {otvet na 3-ij punkt,ot for  to end}
 begin                  
  t[1,1]:=Random(1000);
  a[h]:=t[1,1];
  b[h]:=t[1,1];
 c[h]:=t[1,1];
 end;


 t[1,1]:=GetTickCount;  {GetTickCount-otve4ajet za milesekundi,perevod potom v sekundi}
 Select(a,max);          
 t[1,1]:=GetTickCount-t[1,1];  {otvet na 5-ij punkt,i vse posledujuwie GetTickCount}

 t[2,1]:=GetTickCount;
 Change(b,max);
 t[2,1]:=GetTickCount-t[2,1];

 t[3,1]:=GetTickCount;
 Insert(c,max);
 t[3,1]:=GetTickCount-t[3,1];

 t[1,2]:=GetTickCount;
 Select(a,max);
 t[1,2]:=GetTickCount-t[1,2];

 t[2,2]:=GetTickCount;
 Change(b,max);
 t[2,2]:=GetTickCount-t[2,2];

 t[3,2]:=GetTickCount;
  Insert(c,max);
 t[3,2]:=GetTickCount-t[3,2];

Select2(a,max);
Change2(b,max);
Insert2(c,max);


 t[1,3]:=GetTickCount;
 Select(a,max);
 t[1,3]:=GetTickCount-t[1,3];

 t[2,3]:=GetTickCount;
 Change(b,max);
 t[2,3]:=GetTickCount-t[2,3];
 t[3,3]:=GetTickCount;
  Insert(c,max);
 t[3,3]:=GetTickCount-t[3,3];

 write('      BbI6op              O6MeH        BCTABKu');           {otvet na 1-ij punkt}
 Writeln;
 for h:=1 to 3 do begin
 for z:=1 to 3 do
 write((T[h,z]/1000):15:3);    {otvet na 6-oj punkt}
 Writeln; end;
  readln;
end.
Novenkaja вне форума Ответить с цитированием
Старый 23.06.2011, 15:07   #2
Utkin
Старожил
 
Аватар для Utkin
 
Регистрация: 04.02.2009
Сообщений: 17,351
По умолчанию

Цитата:
2. Размеры массивов – максимально возможные;
У Вас же
Код:
const Max=1000;
Я точно не знаю сколько дает Паскаль, но попробуйте так:
Код:
const Max=MaxInt;
Маньяк-самоучка
Utkin появился в результате деления на нуль.
Осторожно! Альтернативная логика
Utkin вне форума Ответить с цитированием
Старый 23.06.2011, 15:09   #3
Novenkaja
Форумчанин
 
Регистрация: 29.12.2010
Сообщений: 176
По умолчанию

хорошо попробую,это был первый вопрос,жаль только, что ответ от преподовательницы получу не раньше субботы-воскресенья.
Novenkaja вне форума Ответить с цитированием
Старый 23.06.2011, 15:17   #4
Novenkaja
Форумчанин
 
Регистрация: 29.12.2010
Сообщений: 176
По умолчанию

я попробовала,не идёт с MaxInt,выходит в ран и ничего не пишет-не сам,не если я нажимаю цифру на клавиатуре и даже если жму enter то не выходит из программы
а при 1000 идёт,всё показывает,но видите ли не указан максимальный массив
Novenkaja вне форума Ответить с цитированием
Старый 23.06.2011, 15:19   #5
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

1) под какую ОС пишете код? Компилятор Паскаля какой именно?

2) Вашему преподавателю ЯВНО не нравится
Цитата:
Код:
const Max = 1000; {otvet na 2-ij punkt}
а почему, например, не
Код:
const Max = 3000; {otvet na 2-ij punkt}
???
Но, боюсь, что она хочет получить от Вас ДИНАМИЧЕСКИЕ МАССИВЫ.
но это сильно зависит от ответа на мой вопрос №1 ...


ДОПОЛНИТЕЛЬНО
Вы неверно выводите результаты!!!!!

попробуйте заменить код вычислений на такой:
Код:
  t[1, 1] := GetTickCount; {GetTickCount-otve4ajet za milesekundi,perevod potom v sekundi}
  Select(a, max);
  t[1, 1] := GetTickCount - t[1, 1]; {otvet na 5-ij punkt,i vse posledujuwie GetTickCount}


  t[1, 2] := GetTickCount;
  Select(a, max);
  t[1, 2] := GetTickCount - t[1, 2];

  Select2(a, max);
  Change2(b, max);
  Insert2(c, max);

  t[1, 3] := GetTickCount;
  Select(a, max);
  t[1, 3] := GetTickCount - t[1, 3];

  write('      BbI6op              O6MeH        BCTABKu'); {otvet na 1-ij punkt}
и расскажите, откуда взялись результаты по методам Обмена и Вставки...

p.s. сам код сортировки не проверял... надеюсь, что Вы его самостоятельно проверили и от корректный!

Последний раз редактировалось Serge_Bliznykov; 23.06.2011 в 15:24.
Serge_Bliznykov вне форума Ответить с цитированием
Старый 23.06.2011, 15:24   #6
Novenkaja
Форумчанин
 
Регистрация: 29.12.2010
Сообщений: 176
По умолчанию

объясните пожалуйста конкретнее, что Вы имеете под первым вопросом???

да,ей именно не нравится второй пункт,т.к. когда я отсылала это задание,она мне поставила определённое кол-во пунктов за него из максимального кол-ва и написала,что не указаны максимальные размеры массива.
В смысле динамические массивы? мы проходили только одиночный и двумерные массивы.

а если вы пишете 3000,что 1000 мало? это ещё не максимально возможный размер массива да?
Novenkaja вне форума Ответить с цитированием
Старый 23.06.2011, 15:43   #7
Novenkaja
Форумчанин
 
Регистрация: 29.12.2010
Сообщений: 176
По умолчанию

Windows XP, Free Pascal
Novenkaja вне форума Ответить с цитированием
Старый 23.06.2011, 15:44   #8
Novenkaja
Форумчанин
 
Регистрация: 29.12.2010
Сообщений: 176
По умолчанию

результат на экран я думаю выводиться по коду,сама программа его как то высчитывает и потом выдаёт,не знаю
Novenkaja вне форума Ответить с цитированием
Старый 23.06.2011, 15:45   #9
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

Цитата:
результат на экран я думаю выводиться по коду,сама программа его как то высчитывает и потом выдаёт,не знаю
ВЫ (как программист)
Выводите НЕВЕРНЫЙ РЕЗУЛЬТАТ!

Вы думаете, что методы сортировки по столбикам.

А выводите результаты по строчкам - первую строчку - результаты сортировки выбором!
Строчка! А не столбец!

надо вывод переделать!

например, так:
Код:
  for h := 1 to 3 do begin
    for z := 1 to 3 do
      write((T[z, h] / 1000): 15: 3); {otvet na 6-oj punkt}

Последний раз редактировалось Serge_Bliznykov; 23.06.2011 в 15:49.
Serge_Bliznykov вне форума Ответить с цитированием
Старый 23.06.2011, 15:53   #10
Novenkaja
Форумчанин
 
Регистрация: 29.12.2010
Сообщений: 176
По умолчанию

for h:=1 to 3 do begin
for z:=1 to 3 do
write((T[h,z]/1000):15:3);

а в чём разница того,что у меня было напи сано в коде и того,что Вы написала примерно так-это же одно и тоже....

а как вывести правильный результат?

и не знаю,мне учительница ничего про непраивльный результат не написала,только про то,что не выполнен второй пункт
Novenkaja вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
нужно доделать программу на паскале(двумерный массив) Venesia Помощь студентам 12 06.12.2010 19:28
Помогите доделать задание. fred9ra Общие вопросы C/C++ 1 11.01.2009 22:16
Помогите доделать задание в паскале! neomaximus Помощь студентам 4 23.06.2008 18:16
Помогите доделать задание в паскале neomaximus Помощь студентам 5 23.06.2008 14:35
Помогите доделать задание в паскале! neomaximus Помощь студентам 1 22.06.2008 09:45