Модераторы: volvo877, Snowy, MetalFan
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Экстремумы массива, индексы и значения чередуются, Вывод в режиме управления экрана 
:(
    Опции темы
Fist
Дата 27.11.2006, 12:40 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 5
Регистрация: 27.11.2006

Репутация: нет
Всего: нет



Вот решил задачу вроде бы. Работает вывод максимального значения. Но вот беда:
1) Вывод индекса и значения спортсмена с минимальным значением НЕ ВЕРНЫ
2) Экранчик ввода значений очень неудачный, исправить не получается.

Прошу мне помочь, Уважаемые Программисты.

Задача звучит так:
Цитата

Результаты соревнований по прыжкам в воду и порядковый номер участников хранятся в массиве. Нечетный элемент массива определяет номер участника, четный - результат. Определите и выведите на экран лучший и худший результаты с номерами спортсменов.
Код

Program Ex;
   Uses crt;
   Var a:array[1..10] of real;
       r,min,max:real; IDmin,IDmax,y,l,h,k,X,dx,I,j: integer;
 Begin
   clrscr;
   Randomize;
   TextColor(2);
   TextBackground(15);
   Clrscr;

   Window(4,2,50,4);
   TextColor(2);
   TextBackground(4);
   Clrscr;
   GotoXY(2,2);
   Write('Vvedite rezultati po poradku');

   x := 5;
   k := 1;
  For i:= 1 to 10 do
       Begin
            If (i mod 2 = 0) then
               begin
                    Window(x,6,x+40,8);
                    TextColor(14);
                    TextBackground(1);
                    GotoXY(2,2);
                    Read(a[i]);
                    x := x + 3;
               End
               else
               Begin
                    a[i] := k;
               End;
            k := K + 1;
       End;

   max := a[1];
   min := a[1];
   for i:= 1 to 10 do
       begin
            if (i mod 2 = 0) and (a[i] > max) then
               Begin
                    max := a[i];
                    IDmax := i;
               End;
            if (i mod 2 = 0) and (a[i] < min) then
               Begin
                    min := a[i];
                    IDmin := i;
               End;
       end;
   Window(4,14,50,16);
   TextColor(15);
   TextBackground(2);
   Clrscr;
   GotoXY(2,2);
   Write('Best No.', (IDmax/2):0:0, ' = ', max:2:2);

   Window(4,20,50,22);
   TextColor(15);
   TextBackground(4);
   Clrscr;
   GotoXY(2,2);
   Write('Worst No.', IDmin, ' = ', min:2:2);
   Readkey;
 End.


Добавлено @ 12:43 
Если я должен был создать такую тему в "Центре помощи", то прошу перенести эту тему туда. Благодарю.
PM MAIL   Вверх
volvo877
Дата 27.11.2006, 13:11 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 2073
Регистрация: 15.11.2004

Репутация: 2
Всего: 116



Fist, вот так находит правильные значения:
Код

Program Ex;
   Uses crt;
   Var a:array[1..10] of real;
       r:real; IDmin,IDmax,y,l,h,k,X,dx,I,j: integer;

 Begin
   clrscr;
   Randomize;
   TextColor(2);
   TextBackground(15);
   Clrscr;
   Window(4,2,50,4);
   TextColor(2);
   TextBackground(4);
   Clrscr;
   GotoXY(2,2);
   Write('Vvedite rezultati po poradku');
   x := 5;
   k := 1;
  For i:= 1 to 10 do
       Begin
            If (i mod 2 = 0) then
               begin
                    Window(x,6,x+40,8);
                    TextColor(14);
                    TextBackground(1);
                    GotoXY(2,2);
                    Read(a[i]);
                    x := x + 3;
               End
               else
               Begin
                    a[i] := k;
               End;
            k := K + 1;
       End;

   IDmax := 2;
   IDmin := 2;

   for i:= 1 to 10 do
       begin
            if (i mod 2 = 0) then begin
              if (a[i] > a[IDmax]) then IDmax := i;
              if (a[i] < a[IDmin]) then IDmin := i;
            end;
       end;
   Window(4,14,50,16);
   TextColor(15);
   TextBackground(2);
   Clrscr;
   GotoXY(2,2);
   Write('Best No.', IDmax div 2, ' = ', a[IDmax]:2:2);
   Window(4,20,50,22);
   TextColor(15);
   TextBackground(4);
   Clrscr;
   GotoXY(2,2);
   Write('Worst No.', IDmin div 2, ' = ', a[IDmin]:2:2);
   Readkey;
 End.


Что именно не устраивает в окне ввода? Что хочешь переделать?
PM MAIL   Вверх
Fist
Дата 27.11.2006, 13:40 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 5
Регистрация: 27.11.2006

Репутация: нет
Всего: нет



volvo877, спасибо огромное, что отозвался! Работает!

Но я не только хотел узнать решение, но и понять его. Так что если у тебя есть время, объясни пожалуйста изменения, которые ты внес. Вот, что я в первом приближении заметил:
Код

IDmax := 2;
   IDmin := 2;

   for i:= 1 to 10 do
       begin
            if (i mod 2 = 0) then begin
              if (a[i] > a[IDmax]) then IDmax := i;
              if (a[i] < a[IDmin]) then IDmin := i;
            end;
       end;

Код

Write('Worst No.', IDmin div 2, ' = ', a[IDmin]:2:2);


****************************************
Цитата

Что именно не устраивает в окне ввода? Что хочешь переделать? 

Вот такой ввод напрягает:
___  ___  ___  ___  ___  
| 1 | | 2 |  | 3 | | 4 |  | 5 |

Дело в том, что если вводить длинные числа, такие как 111 222 333, то получатся дикие лаги со строчками. (Попробуй! Это что-то.).

я же хотел чтобы ввод был получше. Чтобы квадратики для ввода были побольше, высотой, как те две строчки. А шириной - в расчете на трехзначное число. Прошу тебя, переделай код. А лучше если еще и объяснишь мне-новичку в такам методе представления результатов.

Еще раз спасибо!!!

Добавлено @ 13:44 
Т.е. вот так примерно ДОЛЖНО БЫТЬ:

______     ______     ______    ______     _____
|          |    |          |    |          |    |          |    |          |
|   11   |    |   22   |    |   33   |    |   44   |    |   55   |
----------    ----------    ----------     ---------     ---------
PM MAIL   Вверх
Zero
Дата 27.11.2006, 20:25 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2169
Регистрация: 23.10.2004
Где: Россия, г. Рязань

Репутация: нет
Всего: 24



Цитата(Fist @  27.11.2006,  14:40 Найти цитируемый пост)
Прошу тебя, переделай код. А лучше если еще и объяснишь мне-новичку в такам методе представления результатов.

Короче фёст, смещение при вводе обеспечивает вот эта строка:
Код

x := x + 3;
 Замениш 3 на 4, и будет тебе счастье.
А вообще хош сделать красивый ввод/вывод, то добавь вот такие строки:
Код

asm
     mov ah,01;
     mov cx,$2000;
     int 10h
   end;
 после ввода, чтобы курсор не мигал и вообще будет зашибись смотрется. smile 
Примерно так, должно быть:
Код

Program Ex;
   Uses crt;
   Var a:array[1..10] of real;
       r:real; IDmin,IDmax,y,l,h,k,X,dx,I,j: integer;

 Begin
   clrscr;
   Randomize;
   TextColor(2);
   TextBackground(15);
   Clrscr;
   Window(4,2,50,4);
   TextColor(2);
   TextBackground(4);
   Clrscr;
   GotoXY(2,2);
   Write('Vvedite rezultati po poradku');
   x := 5;
   k := 1;
  For i:= 1 to 10 do
       Begin
            If (i mod 2 = 0) then
               begin
                    Window(x,6,x+40,8);
                    TextColor(14);
                    TextBackground(1);
                    GotoXY(2,2);
                    Read(a[i]);
                    x := x + 4;
               End
               else
               Begin
                    a[i] := k;
               End;
            k := K + 1;
       End;

   asm
     mov ah,01;
     mov cx,$2000;
     int 10h
   end;

   IDmax := 2;
   IDmin := 2;

   for i:= 1 to 10 do
       begin
            if (i mod 2 = 0) then begin
              if (a[i] > a[IDmax]) then IDmax := i;
              if (a[i] < a[IDmin]) then IDmin := i;
            end;
       end;
   Window(4,14,50,16);
   TextColor(15);
   TextBackground(2);
   Clrscr;
   GotoXY(2,2);
   Write('Best No.', IDmax div 2, ' = ', a[IDmax]:2:2);
   Window(4,20,50,22);
   TextColor(15);
   TextBackground(4);
   Clrscr;
   GotoXY(2,2);
   Write('Worst No.', IDmin div 2, ' = ', a[IDmin]:2:2);
   Readkey;
 End.

PM MAIL ICQ   Вверх
Fist
Дата 28.11.2006, 13:39 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 5
Регистрация: 27.11.2006

Репутация: нет
Всего: нет



Zero, не сработало, разницы не заметил  smile 

Я не Фест, я ФИСТ (аббревиатура факультета) smile

Это сообщение отредактировал(а) Fist - 28.11.2006, 13:39
PM MAIL   Вверх
Zero
Дата 28.11.2006, 18:11 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2169
Регистрация: 23.10.2004
Где: Россия, г. Рязань

Репутация: нет
Всего: 24



Цитата(Fist @  28.11.2006,  14:39 Найти цитируемый пост)
Zero, не сработало, разницы не заметил

В каком смысле не сработало, ты ведь про ввод начальных значений говорил, типа у тебя буквы слеплялись, если сразу три вводить, т.к. смещение при воводе числа перескакивало на 3, я исправил на 4, стало вводится нормально, т.е. с пробелом.
Я только что проверил, свой код который вставлен выше, у меня вводится нормально, с учётом по 3 цифры.
Или ты про другое имел ввиду? smile 
PM MAIL ICQ   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Delphi"
THandle
Rrader
volvo877

Запрещается!

1. Обсуждать и делится взломанными компонентами или программным обеспечением

2. Публиковать ссылки на варез

3. Оффтопить

  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь
  • 90% ответов на свои вопросы можно найти в DRKB (Delphi Russian Knowledge Base) - крупнейшем в рунете сборнике материалов по Дельфи

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, THandle, Rrader, volvo877.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Object Pascal: кроссплатформенные технологии | Следующая тема »


 




[ Время генерации скрипта: 0.0762 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.