Форум
» Назад на решение задач по физике и термеху
Регистрация | Профиль | Войти | Забытый пароль | Присутствующие | Справка | Поиск

» Добро пожаловать, Гость: Войти | Регистрация
    Форум
    Информационные технологии
        Решение задач на Pascal. Форум 2
Отметить все сообщения как прочитанные   [ Помощь ]
» Добро пожаловать на форум "Информационные технологии" «

Переход к теме
<< Назад Вперед >>
Несколько страниц [ 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 ]
Модераторы: paradise, KMA
  

Dale



Участник

Lenin, давайте по порядку:
1) Пожалуйста, переведите текст задач с украинского на русский, это нужно для четкого понимания условия задачи
(кстати, с вашей ссылки ничего не скачивается)
2)Модуль, который выводит меню, делает это в графическом режиме; гораздо проще и понятней будет написать меню в текстовом, с использованием модуля crt. Это реализуется элементарно:

Code Sample:
 
uses crt;
const kol=4;{ количество пунктов в меню}
var k,i:integer;
   menu:array[1..kol] of string;
   c:char;
procedure ris(item:integer);{Рисуем меню, item - number selected item}
begin
      TextBackGround(0);
clrscr;
sound(3000);
delay(100);
nosound;
 for i:=1 to kol do begin
    if i=item then begin
     TextBackGround(7); Textcolor(0);
    end else begin
     TextBackGround(0); Textcolor(7);
    end;
 writeln(menu[ i ]);
 end;{for}
end;
Procedure OnLoad_1;
begin
{Здесь должна быть задча 1}
clrscr;
writeln('Задача 1');
readkey;
end;

Procedure OnLoad_2;
begin
{Здесь должна быть задча 2}
clrscr;
writeln('Задача 2');
readkey;

end;

Procedure OnLoad_3;
begin
{Здесь должна быть задча 3}
clrscr;
writeln('Задача 3');
readkey;

end;
procedure vipoln(item:integer); {Выполняем выбранный пункт меню}
begin
case item of
 1:OnLoad_1;
 2:OnLoad_2;
 3:OnLoad_3;
 4:Halt;{Выход из программы}
end;
end;

begin
menu[1]:='Здача 1';
menu[2]:='Здача 2';
menu[3]:='Здача 3';
menu[4]:='Выход';

k:=1;
ris(k);
while true do begin
c:=readkey;
case c of
#72:{up}  if k=1 then  k:=kol else k:=k-1;
#80:{down}if k=kol then  k:=1 else k:=k+1;
#13:{enter}Vipoln(k);
end;
ris(k);

end;{while}

end.



внешняя ссылка удалена


Как видите, текст программы по сравнению с вашими модулями короток, и более нагляден.
Здесь достаточно написать в процедурах  OnLoad_1, OLoad_2, OnLoad_3 ваши задачи(не убирая readkey), и все будет работать.

Здесь из модуля crt используется 7 подпрограмм:
clrscr - используется для очистки экрана перед прорисовкой меню и перед выполнением подпрограмм для решения задач
sound - используется для воспроизведения звукового сигнала во время прорисовки меню(процедура  ris(item:integer))
delay - используется для паузы после начала воспроизведения звукового сигнала в процедуре  ris(item:integer)
nosound - используется для остановки воспроизведения звукового сигнала в процедуре  ris(item:integer)
textcolor - используется во время прорисовки меню(процедура  ris(item:integer)) для изменения цвета текста выводимой строки меню
textbackground - используется во время прорисовки меню(процедура  ris(item:integer)) для изменения цвета фона выводимой строки меню
readkey - используется в тексте основной программы для определения характера нажатой клавиши (стрелка вверх, стрелка вниз, enter).


главные моменты всего меню описать, с помощью чего, что у нас там происходит

1)Пункты меню содержатся в строковом массиве menu, нумерация элементов начинается с единицы. Количество пунктов меню находится в константе kol. В переменной k хранится номер выбранного пункта меню.
2)Процедура ris(item:integer) выводит меню, в качестве параметра item в нее поступает номер выделенного элемента. Прорисовка состоит из следующих этапов:
a) очистка экрана
б) В цикле for выводятся значения массива menu. Перед выводом каждой новой строки меняется цвет фона и цвет текста в зависимости от переданного параметра item.
3)Процедура vipoln(item:integer) определяет действия, выполняемые пунктом меню, номер которого передается процедуре через параметр item. Первым трем пунктам назначается выполнение процедур, соответствующих выполнению выбранных задач. Четвертому пункту меню соответствует выход из программы.
4)В начале работы программы задаются  значения пунктов меню и переменной k, после чего происходит вывод меню.
Затем запускается "бесконечный" цикл while:
while true do
В теле цикла с помощью процедуры readkey происходит ожидание нажатия клавиши пользователем, после нажатия зaдается переменная c символьного типа. Затем, в зависимости от того, какую кнопку нажал пользователь, выполняется изменение переменной k и выполняется процедура прорисовки меню, в качестве параметра процедуре передается переменная k. Если происходит нажатие клавиши enter, выполняется процедура vipoln(item:integer) , в качестве параметра item передается k.
----------------------------------

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





(Сообщение отредактировал Dale 21 июня 2009 21:36)

Всего сообщений: 139 | Присоединился: май 2009 | Отправлено: 21 июня 2009 19:49 | IP
Lenin



Новичок

Dale, вот мои задачи
внешняя ссылка удалена

А вообще мне кажется если я вам полностью скину курсовую роботу, с блок схемами и т.д. вам будет проще орентироватся что к чему.

Всего сообщений: 12 | Присоединился: май 2009 | Отправлено: 21 июня 2009 22:56 | IP
Arturka91


Новичок

помогите пожалуйста решить две задачи кому не трудно!!! просто очень срочно нужно!!! а я не успеваю  
1) Дана последовательность целых цисел,представленная списком, упорядочена по не убыванию, удалить повторяющиеся элементы, а последовательность упорядочить по убыванию.
2)используя рекурсивную процедуру получить массив каждый элемент которого равен своему индексу.
Буду очень признателен!!!!

Всего сообщений: 5 | Присоединился: июнь 2009 | Отправлено: 22 июня 2009 21:07 | IP
Dale



Участник

Lenin, 

А вообще мне кажется если я вам полностью скину курсовую роботу, с блок схемами и т.д. вам будет проще орентироватся что к чему.

поверьте, я при желании легко смогу разобраться в этой огромной куче кода, и вот что я понял при беглом просмотре: в этом примере  куча всяких наворотов, с применением графического режима, показом заставки перед началом работы программы...  Очевидно, что автор этого курсача делал его не один день, постепенно реализуя свои собственные идеи за счет средств языка pascal. А вам оно надо? Зачем лезть в графику, зачем использовать кучу модулей, зачем писать столько кода? Ведь простота - залог успеха. Весь курсач прекрасно поместился в предыдущем ответе, я его написал за пол-часа. Вы не смогли разобраться в своем примере. Теперь посмотрите на мой код, почитайте пояснения - и вы, скорее всего, поймете, что и как там работает и как все это просто. Осталось только вписать решения трех простых задачек, и ваш курсач готов! Если хотите ввести "навороты", например, вывод меню в центре окна в красивой рамке - достаточно приписать несколько строк (если хотите, я укажу, где и какие)

Итак, подвожу итоги:
1) Я не буду разбираться в вашей курсовой, но вы легко сможете разобраться в моем варианте вашей курсовой, а если нет - можете задавать вопросы, и я с удовольствием на них отвечу.

2)Если вы не смотря ни на что намерены использовать ТОТ код, то я ни чем не смогу вам помочь

3)Если вы все же решили использовать мой код, я готов помочь вам с решениями задач составлением блок-схем. Если у вас есть какие-то идеи по поводу наворотов меню, пишите, и мы их реализуем.Если  есть какие-нибудь дополнительные требования к курсовой, кроме использования >5 подпрограмм модуля crt, - перечислите их.



(Сообщение отредактировал Dale 23 июня 2009 1:14)


(Сообщение отредактировал Dale 23 июня 2009 1:17)

Всего сообщений: 139 | Присоединился: май 2009 | Отправлено: 23 июня 2009 1:03 | IP
Lenin



Новичок

Dale, давайте попорядку. Я согласен что простота залог успеха, но требованияк курсовой роботе таковы:
1) Заставка (предлогаю заставку сделать самой простенькой, написать большим шрифтом на весь экран "KNUBA")
2) 5 процедур и функций модуля CRT: keypressed, clrscr, textcolor (color), delay (F), gotoxy (x,y). (порядок не имеет значения,как лутше так и ставьте)
3) Меню которое состоит из 4-ех пунктов:
1 задача№1
2 задача№2
3 задача№3
4 выход
4) Блок-схемы для каждой задачи отдельно и одна на всю курсовую роботу!
5) Описание всей курсовой роботы.
6) Описание процедур и функций.

Кое-что у нас уже есть! Задачи я дал выше. Делаем задачи и прописываем их в курсовой. Составляем Блок-Схемы и оформляем в текстовом режиме!

Dale, вы пожалуйста советуйте помогайте, а я буду к вам подстраиватся и включатся в тему! Пожалуйста

(Сообщение отредактировал Lenin 23 июня 2009 11:31)

Всего сообщений: 12 | Присоединился: май 2009 | Отправлено: 23 июня 2009 10:39 | IP
Arturka91


Новичок

у кого есть минутка посмотрите пожалуйста мои задачи

Всего сообщений: 5 | Присоединился: июнь 2009 | Отправлено: 23 июня 2009 21:40 | IP
Dale



Участник

Arturka91  
1)
Code Sample:
 
uses crt;
var cnucok:array[1..100] of integer;
    col,i,j,nycToU_CTAKAH:integer;

begin
{}
clrscr;
cnucok[1]:=1;
cnucok[2]:=2;
cnucok[3]:=2;
cnucok[4]:=3;
cnucok[5]:=4;
cnucok[6]:=5;
cnucok[7]:=5;
cnucok[8]:=6;
cnucok[9]:=6;
cnucok[10]:=6;
cnucok[11]:=7;
col:=11;
writeln('Массив: ');
for i:=1 to col do write(cnucoK[ i ],'   ');

i:=2;
while i<col do begin
   if cnucok[i-1]=cnucok[ i ] then begin
     for j:=i to col-1 do cnucok[ j ]:=cnucok[j+1];
     col:=col-1;
   end else i:=i+1;
end;{while}
writeln;
writeln('Массив после удаления одинаковых элементов:');

for i:=1 to col do write(cnucoK[ i ],'   ');

for i:=1 to col-1  do
  for j:=1 to col-i  do
   if cnucok[ j ]<cnucok[j+1] then begin
    nycToU_CTAKAH:=cnucok[ j ];
    cnucok[ j ]:=cnucok[j+1];
    cnucok[j+1]:=nycToU_CTAKAH;
   end;


writeln;
writeln('Массив после сортирови:');
for i:=1 to col do write(cnucoK[ i ],'   ');
readkey;
end.


внешняя ссылка удалена
2)
Code Sample:
 
uses crt;
const N=15;
var m:array[1..N] of integer;
   i:integer;

    procedure AAA(i:integer);
    begin
      m[ i ]:=i;
      i:=i+1;
      if i=N+1 then exit else AAA(i);
    end;

begin
AAA(1);
clrscr;
for i:=1 to N do write(m[ i ],'   ');
readkey;
end.


внешняя ссылка удалена
Если есть вопросы, задавайте!


(Сообщение отредактировал Dale 24 июня 2009 0:43)


(Сообщение отредактировал Dale 24 июня 2009 1:41)

Всего сообщений: 139 | Присоединился: май 2009 | Отправлено: 24 июня 2009 0:38 | IP
Dale



Участник

Lenin  ,

5 процедур и функций модуля CRT: keypressed, clrscr, textcolor (color), delay (F), gotoxy (x,y)

Неужели процедуру keypressed использовать обязательно? Я ее запихал в intro, но вообще подобное применение придает приложению оттенок несерьезности :-)
Итак, в соответствие с вашими пожеланиями я дополнил приложение процедурой для вывода текстовых файлов. Кроме вывода заставки перед программой она пригодится для решения третей задачи.
описание:
WriteFile(ADPEC:string; intro:boolean);
ADPEC - адрес файла;
intro - если равно true, то программа выводит файл построчно с воспроизведением звука, выводя любые символы кроме пробела как пробел цветом текста заместо цвета фона.
WriteFile(ADPEC:string; intro:boolean);
Кроме того, я добавил решение второй задачи.
============================================
uses crt;
const kol=4;{ количество пунктов в меню}
    txtColor=1;
     bkColor=6;

var k,i,j,i1,j1:integer;
   menu:array[1..kol] of string;
   c:char;
procedure WriteFile(ADPEC:string; intro:boolean);
var f:text;
    cumBoJI:char;
begin
  writeln;
  textbackground(bkColor);clrscr;
  assign(f,ADPEC);
  reset(f);
  while not eof(f) do begin
   read(f,CUMBOJI);
   if intro then
    case CUMBOJI of
      #10,#13:begin
                sound(3214);
                delay(5000);
                nosound;
              end;
          ' ':begin
                Textcolor(txtColor); TextBackGround(bkColor);
              end;
          else begin
                 Textcolor(bkColor); TextBackGround(txtColor);
                 CUMBOJI:=' ';
               end;
    end;{case}

   write(CUMBOJI);
  end;
  close(f);
  writeln;
  textcolor(txtcolor); textbackground(bkcolor);

  {Сюда я впихнул keypressed}
 while not keypressed do begin
  textcolor(random(10));
  gotoxy(1,1);
  write('Нажмите любую клавишу');
  delay(30000);
 end  ;

end;


procedure ris(item:integer);{Рисуем меню, item - number selected item}
begin
      TextBackGround(bkColor);
clrscr;
sound(3000);
delay(100);
nosound;
 for i:=1 to kol do begin
    if i=item then begin
     TextBackGround(txtColor); Textcolor(bkColor);
    end else begin
     TextBackGround(bkColor); Textcolor(txtColor);
    end;
 writeln(menu[ i ]);
 end;{for}
end;
Procedure OnLoad_1;
begin
{Здесь должна быть задча 1}
clrscr;
writeln('Задача 1');
readkey;
end;

Procedure OnLoad_2;
const n=5;m=8;
var mas:array[1..m,1..n] of integer;
   f,don:boolean;
  min:array[1..m] of integer;
  max:integer;
begin
{Здесь должна быть задча 2}
clrscr;
writeln('Задача 2');
writeln;
{Заполняем матрицу случайными неравными числами}
randomize;
for i:=1 to m do
for j:=1 to n do begin
   f:=true;
   while f do begin
        mas[i,j]:=random(m*n)+1;
        f:=false;
          for i1:=1 to m do
           for j1:=1 to n do begin
              don:=not((i=i1) and (j=j1));
             if (mas[i,j]=mas[i1,j1]) and (don) then f:=true;
            end;
   end;
 end;{for j}
 {Выводим массив}
for i:=1 to m do begin
for j:=1 to n do write(mas[i,j],'  ');
writeln;
end;
{Выб. мин. элементы}
for i:=1 to m do min[ i ]:=1;

for i:=1 to m do
  for j:=2 to n do if mas[i,min[ i }}>mas[i,j] then min[ i ]:=j;

{Выводим минимумы}
writeln('Минимальные элементы:');
for i:=1 to m do writeln(i,' - я строка: ',mas[i,min[ i }});
{ищем максимум}
max:=1;
for i:=2 to n do if mas[i,min[ i }}>mas[max,min[max}} then max:=i;
{Выв. максимум и его индексы}
writeln;
writeln('Максимальный элемент равен ', mas[max,min[max}});
writeln('Его индексы  ', max,' строка,  ',min[max],' столбец');
readkey;

end;

Procedure OnLoad_3;
begin
{Здесь должна быть задча 3}
clrscr;
writeln('Задача 3');
readkey;

end;
procedure vipoln(item:integer); {Выполняем выбранный пункт меню}
begin
case item of
 1:OnLoad_1;
 2:OnLoad_2;
 3:OnLoad_3;
 4:Halt;{Выход из программы}
end;
end;

begin
writefile('Knuba.txt',true);
readkey;
menu[1]:='Здача 1';
menu[2]:='Здача 2';
menu[3]:='Здача 3';
menu[4]:='Выход';

k:=1;
ris(k);
while true do begin
c:=readkey;
case c of
#72:{up}  if k=1 then  k:=kol else k:=k-1;
#80:{down}if k=kol then  k:=1 else k:=k+1;
#13:{enter}Vipoln(k);
end;
ris(k);

end;{while}

end.

================================================
внешняя ссылка удалена
Для наглядности жирным я выделил изменения, красным - процедуру keypressed
В каталоге с программой (bin) должен находится файл, что-то типа этого
внешняя ссылка удалена
Ну теперь включайтесь и вы, задавайте вопросы!



(Сообщение отредактировал Dale 24 июня 2009 7:03)

Всего сообщений: 139 | Присоединился: май 2009 | Отправлено: 24 июня 2009 6:55 | IP
anton94


Новичок

Игра "Камень ножницы бумага". Играют 3 игрока. Кмень тупит ножницы, ножницы режут бумагу, бумага кроет камень. Нужно смоделировать задачу игры с помощью модуля CRT. Помогите, срочно надо!!!плиз.


(Сообщение отредактировал anton94 24 июня 2009 11:10)

Всего сообщений: 1 | Присоединился: июнь 2009 | Отправлено: 24 июня 2009 10:24 | IP
Lenin



Новичок

Dale, так, с меню понятно! Теперь осталось сделать задачи и составить блоксхемы.
Если я найду какието наброски поповоду задач я скину, а если ненайду придется здесь перерывать ветку сообщений.

Всего сообщений: 12 | Присоединился: май 2009 | Отправлено: 24 июня 2009 10:40 | IP

Эта тема закрыта, новые ответы не принимаются

Переход к теме
<< Назад Вперед >>
Несколько страниц [ 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 ]

Форум работает на скрипте © Ikonboard.com