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

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

Вернуться   Форум программистов > Delphi программирование > Паскаль, Turbo Pascal, PascalABC.NET
Регистрация

Восстановить пароль
Повторная активизация e-mail

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

Ответ
 
Опции темы Поиск в этой теме
Старый 22.12.2012, 02:29   #1
ameks94
 
Регистрация: 25.11.2012
Сообщений: 9
По умолчанию в Pascal ABC.Net ошибка:"невозможно явно преобразовать тип integer к System.random"

Доброго времени суток. Я написал программу, которая сортирует массив разными способами ("быстрая сортировка", "пузырьковый","вставки"),
но для измерения времени сортировок в ABC.NET я использовал процедуры из модуля System, и теперь программа начала выдавать ошибку : "невозможно явно преобразовать тип integer к System.random".
Вот 1 часть программы программы:
Код:
uses
  System.Diagnostics, System, crt;

type
  mas = array[1..10000] of integer;

var
  b, v: mas;//v- копия массива для сортировки хоара
  k, m, p: integer; 
  key: char;
  counter1: Stopwatch;
  ts: TimeSpan;


procedure sozd(n: integer) ;
var
  h: integer;
begin
  for h := 1 to n do 
    b[h] := random(200) + 100;
  for h := 1 to n do
  begin
    write(b[h]:4);
  end;
  writeln;
  p := 1;
end;



procedure qSort(var ar: mas; low, high: integer);
var
  i, j: integer;
  m, wsp: integer;
begin
  i := low;
  j := high;
  m := ar[(i + j) div 2];
  repeat
    while(ar [i] < m) do i := i + 1;
    while(ar [j] > m) do j := j - 1;
    if(i <= j) then begin
      wsp := ar[i];
      ar[i] := ar[j];
      ar[j] := wsp;
      i := i + 1;// до этого индекса все элементы уже меньше чем опорный элемент m
      j := j - 1;// после этого эл все больше чем m
    end;
  until (i > j); // посли первой итерации все элементы станут по разные стороны от опорного меньшие - слева, большие - справа
  if(low < j) then qSort(ar, low, j);// сортирует левую часть
  if(i < high) then qSort(ar, i, high);// правую
end;


procedure puz;
var
  prap, adop:
  integer;i, h: integer;
  a: mas;
begin
  for i := 1 to k do a[i] := b[i];
  h := 2;
  repeat  {сортировка}
    prap := 0;{щётчик если масив уже отсортирован.. то не чего происходить не будет и цыкл завершиться}
    for i := k downto h do {до 2 потому,что дальше мы сравниваем элемент j-1 и j}
    begin
      if A[i] < A[i - 1] then begin
        ADOP := A[i - 1];
        A[i - 1] := A[i];
        A[i] := ADOP;
        PRAP := 1; {показывает что сортировка происходила}
      end; 
    end; 
    h := h + 1;  
  until prap = 0; {если сортировки не было, то зачение prap как было так и осталось 0 }
  writeln('Отсортированный методом пузырька:');
  for i := 1 to k do
  begin
    write(a[i]:4);
  end;
end;




procedure Vstavka;
var
  i, j, g: integer;e: integer;a: mas;
begin
  for i := 1 to k do a[i] := b[i];
  for i := 2 to k do
  begin
    e := A[i];
    j := 1;
    while (e > a[j]) do
      Inc(j);
    for g := i - 1 downto j do
      a[g + 1] := a[g];
    a[j] := e;
  end;
  writeln('Отсортированный методом вставки:');
  for i := 1 to k do
  begin
    write(a[i]:4);
  end;
end;
ameks94 вне форума Ответить с цитированием
Старый 22.12.2012, 02:30   #2
ameks94
 
Регистрация: 25.11.2012
Сообщений: 9
По умолчанию

Вторая часть программы:
Код:
begin
  repeat
    if p = 1 then 
    begin
      clrscr;
      writeln('1-Генерация массива.');
      writeln('2-Сортировка методом Хоара("quicksort").');
      writeln('3-Методом "пузырька".');
      writeln('4-Методом "вставки".');
      writeln('6-Выход.');
      key := readkey;
      case key of
        '1': 
          begin
            writeln;
            write('Введите длину массива:'); readln(k);
            writeln;
            writeln('Массив создан:'); 
            sozd(k);
            writeln;
            readkey;
          end;
        
        '2':
          begin
            writeln;
            writeln('Первоначальный массив:');
            for m := 1 to k do
              write(b[m]:4); 
            for m := 1 to k do v[m] := b[m];
            counter1 := new Stopwatch();// создаём новый счётчик
            counter1.Start();// Запускаем счётчик
            qSort(v, 1, k); 
            counter1.Stop();// Останавливаем счётчик
            writeln;
            writeln('Отсортированный методом Хоара:');
            for m := 1 to k do
            begin
              write(v[m]:4);
            end;
            writeln;
            ts := counter1.Elapsed;// присавивам ts значение количества пройденного времени
            writeln('Время затраченное на сортировку:', ts);
            readkey;
            writeln;
          end;
        '3': 
          begin
            writeln('Первоначальный массив:');
            for m := 1 to k do
              write(b[m]:4);
            writeln;
            writeln;
            counter1 := new Stopwatch();// создаём новый счётчик
            counter1.Start();// Запускаем счётчик
            puz;
            counter1.Stop();// Останавливаем счётчик
            ts := counter1.Elapsed;// присавивам ts значение количества пройденного времени
            writeln('Время затраченное на сортировку:', ts);
            readkey;
          end;
        '4': 
          begin
            writeln('Первоначальный массив:');
            for m := 1 to k do
              write(b[m]:4);
            writeln;
            counter1 := new Stopwatch();// создаём новый счётчик
            counter1.Start();// Запускаем счётчик
            vstavka;
            counter1.Stop();// Останавливаем счётчик
            ts := counter1.Elapsed;// присавивам ts значение количества пройденного времени
            writeln('Время затраченное на сортировку:', ts);
            readkey;
          end;
        '6': exit;
      end;
    end
    else
    begin
      clrscr;
      writeln('1-Генерация массива.');
      writeln('6-Выход.');
      key := readkey;
      case key of
        '1': 
          begin
            writeln;
            write('Введите длину массива:'); readln(k);
            writeln;
            writeln('Массив создан:'); 
            sozd(k);
            writeln;
            readkey;
          end;
        '6': exit;
      end;
    end;
  until key = '6';
  
end.
ameks94 вне форума Ответить с цитированием
Старый 22.12.2012, 23:41   #3
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,238
По умолчанию

на какую строчку ругается компилятор?
если на эту:
Цитата:
Код:
    b[h] := random(200) + 100;
то попробуйте (для начала) написать так:
Код:
    b[h] := 100 + random(200);
Serge_Bliznykov вне форума Ответить с цитированием
Старый 23.12.2012, 02:04   #4
ameks94
 
Регистрация: 25.11.2012
Сообщений: 9
По умолчанию

к сожалению нечего не изменилось( по прежнему ошибка
ameks94 вне форума Ответить с цитированием
Ответ


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

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Pascal ABC строки - программа, которая каждую встреченную букву "б" заменяет сочетанием "ку" (использовать модули) Raigo Помощь студентам 6 17.05.2012 15:35
Игра "Охота" в паскале abc net vampir20096 Помощь студентам 0 06.05.2012 11:58
Периодически выскакивает ошибка "not valid integer value" Dux Общие вопросы Delphi 11 07.10.2010 18:37
Ошибка(оконная а не компилятора) "is not a valid integer value" sinobithug Помощь студентам 6 14.08.2010 22:49
Как обойти "преобразование типа из "string" в "float" невозможно" lexluter1988 Помощь студентам 1 07.08.2010 12:23