![]() |
1. Заголовок темы должен быть информативным. В противном случае тема удаляется ...
2. Все тексты программ должны помещаться в теги [code=pas] ... [/code].
3. Прежде чем задавать вопрос, см. "FAQ", если там не нашли ответа, воспользуйтесь ПОИСКОМ, возможно такую задачу уже решали!
4. Не предлагайте свои решения на других языках, кроме Паскаля (исключение - только с согласия модератора).
5. НЕ используйте форум для личного общения, все что не относится к обсуждению темы - на PM!
6. Одна тема - один вопрос (задача)
7. Проверяйте программы перед тем, как разместить их на форуме!!!
8. Спрашивайте и отвечайте четко и по существу!!!
![]() |
Rzevsky |
![]()
Сообщение
#1
|
Гость ![]() |
Помогите, кто чем может! Во вторник экзамен, а мне нужно ещё несколько заданий доделать. Вроде рагьше писал, похожие программы, а вчера сел и понял, что всё забыл. Задачи такие:
1. На плоскости заданы n точек, определить между какими самое большое растояние. Я найти растояние только между соседними точками, подскажите как проверить все комбинации. 2. Среди работников данного предприятия найти тех, чья з/п ниже средней, а так же распечатать список тех, которые на предприятии более 10 лет с указанием з/п, фамилии, стажа и должности. 3. Дан массив, содержащий информацию об учениках, выяснить на сколько человек в 8-х классах больше чем в 9-х. 4. Опишите матрицу А размером 100х200 элементов типа char. Заполнить её процедурой FillChar (А, 2000, 'х'). 5. Составить программу размещения ДРП, строка за строкой, треугольной матрицы размером N, в i-той строке которой i компонетнтов типа word, i=1,2,3,..,N. Занесите в элемент массива Mem N соответственно. Извините за нечёткие фразы, просто мне так переписали задание(. 6. Создать окно в рамке на фоне, заполненном псевдографическим символом #176 синего цвета, с текстом из файла. Выполнять перемещение окна вверх, вниз, вправо или влево с сохранением фона по клавишам управления курсором. Пожалуйста помогите! Я отблагодарю!. :'( |
![]() ![]() |
Amro |
![]()
Сообщение
#2
|
![]() Пионер ![]() ![]() Группа: Пользователи Сообщений: 146 Пол: Мужской Репутация: ![]() ![]() ![]() |
Эта задача с форума на исходниках........(спасибо модератору some1)
У меня такая же.......вот только в процедурах не разобрался ещё!!! Господа программёры....может кто разбирается в модуле crt..... Прошу вас напишите к этой проге комментарии.....а именно коментарии к процедурам.....а то у нас даже в методичках такого нету........ Если можно поподробнеее.......Заранее благодарен!!! Код program l2; uses crt; const {Имя файла, которым должен заполняться фон} {Фон} BackFGColor=LightGray; BackBGColor=Blue; BackSymbol=176; BackValue=BackBGColor shl 12+BackFGColor shl 8+BackSymbol; {Атрибуты окна} {-начальное положение (начиная с 0)} WinStartXPosition=9; WinStartYPosition=4; {Размер} WinXSize=40; WinYSize=12; {-Символы бордюра окна} WinBorderTopLeft=#201; WinBorderTopBottom=#205; WinBorderTopRight=#187; WinBorderLeftRight=#186; WinBorderBottomLeft=#200; WinBorderBottomRight=#188; {-Цвет бордюров окна} WinBorderFGColor=White; WinBorderBGColor=LightGray; WinBorderColor=WinBorderBGColor shl 4+WinBorderFGColor; {-Цвет и символ внутренности окна} WinContFGColor=black; WinContBGColor=LightGray; WinContSymbol=' '; WinContColor=WinContBGColor shl 4+WinContFGColor; {Кнопки клавиатуры} KeyEsc=#27; KeyLeft=#75; KeyUp=#72; KeyRight=#77; KeyDown=#80; KeyEnter=#13; type Letter=record case boolean of false: (val:char; col:byte); true: (dat:word;) end; TWindow=record Data:array[1..WinYSize,1..WinXSize] of Letter; Background:array[1..WinYSize,1..WinXSize] of Letter; x,y:integer; XSize,YSize:word; end; var ScreenBuffer:array[1..25,1..80] of Letter; Screen:array[1..25,1..80] of Letter absolute $B800:0000; p,o:word; temp:char; Window:TWindow; f:text; FileName:string[12]; procedure DrawWindow(var Win:TWindow); var p,o:byte; begin with Win do for o:=0 to high(Data)-low(Data) do for p:=0 to high(Data[1])-low(Data[1]) do if (y+o in [0..high(ScreenBuffer)-low(ScreenBuffer)])and (x+p in [0..high(ScreenBuffer[1])-low(ScreenBuffer[1])]) then begin Background[low(Background)+o,low(Background[1])+p]:= ScreenBuffer[low(ScreenBuffer)+y+o,low(ScreenBuffer[1])+x+p]; ScreenBuffer[low(ScreenBuffer)+y+o,low(ScreenBuffer[1])+x+p]:= Data[low(Data)+o,low(Data[1])+p]; end; end; procedure ClearWindow(Win:TWindow); var p,o:byte; begin with Win do for o:=0 to high(Background)-low(Background) do for p:=0 to high(Background[1])-low(Background[1]) do if (y+o in [0..high(ScreenBuffer)-low(ScreenBuffer)])and (x+p in [0..high(ScreenBuffer[1])-low(ScreenBuffer[1])]) then ScreenBuffer[low(ScreenBuffer)+y+o,low(ScreenBuffer[1])+x+p]:= Background[low(Background)+o,low(Background[1])+p]; end; procedure InitWindow(var Win:TWindow;x,y:integer;XSize,YSize:word;ShowNow:boolean); var p,o:byte; begin if(XSize<2)or(YSize<2) then exit; Win.x:=x; Win.y:=y; Win.XSize:=XSize; Win.YSize:=YSize; with Win do begin Data[Low(Data),Low(Data[1])].val:=WinBorderTopLeft; Data[Low(Data),Low(Data[1])].col:=WinBorderColor; Data[Low(Data),high(Data[1])].val:=WinBorderTopRight; Data[Low(Data),high(Data[1])].col:=WinBorderColor; Data[high(Data),Low(Data[1])].val:=WinBorderBottomLeft; Data[high(Data),Low(Data[1])].col:=WinBorderColor; Data[high(Data),high(Data[1])].val:=WinBorderBottomRight; Data[high(Data),high(Data[1])].col:=WinBorderColor; for o:=Low(Data)+1 to high(Data)-1 do begin Data[o,low(Data[1])].val:=WinBorderLeftRight; Data[o,low(Data[1])].col:=WinBorderColor; Data[o,high(Data[1])].val:=WinBorderLeftRight; Data[o,high(Data[1])].col:=WinBorderColor; end; for p:=Low(Data[1])+1 to high(Data[1])-1 do begin Data[low(Data),p].val:=WinBorderTopBottom; Data[low(Data),p].col:=WinBorderColor; Data[high(Data),p].val:=WinBorderTopBottom; Data[high(Data),p].col:=WinBorderColor; for o:=Low(Data)+1 to high(Data)-1 do begin Data[o,p].val:=WinContSymbol; Data[o,p].col:=WinContColor; end; end; end; if ShowNow then DrawWindow(Win); end; begin clrscr; for o:=low(ScreenBuffer) to high(ScreenBuffer) do for p:=low(ScreenBuffer[1]) to high(ScreenBuffer[1]) do ScreenBuffer[o,p].dat:=BackValue; move(ScreenBuffer,screen,sizeof(screenBuffer)); writeln('введите путь к файлу и имя '); read(FileName); assign(f,FileName); reset(f); o:=low(screenBuffer); p:=low(ScreenBuffer[1]); while not eof(f) and (o<=high(ScreenBuffer)) do begin read(f,temp); if temp=KeyEnter then begin read(f,temp); p:=low(ScreenBuffer[1]); inc(o); end else if p<=high(ScreenBuffer[1]) then begin ScreenBuffer[o,p].val:=temp; inc(p); end; end; close(f); InitWindow(Window,WinStartXPosition,WinStartYPosition,WinXSize,WinYSize,true); move(ScreenBuffer,screen,sizeof(screenBuffer)); repeat if keypressed then case readkey of KeyEsc: break; #0: case readkey of KeyLeft: begin ClearWindow(Window); dec(Window.x); DrawWindow(Window); end; KeyUp: begin ClearWindow(Window); dec(Window.y); DrawWindow(Window); end; KeyRight: begin ClearWindow(Window); inc(Window.x); DrawWindow(Window); end; KeyDown: begin ClearWindow(Window); inc(Window.y); DrawWindow(Window); end; end; end; move(ScreenBuffer,screen,sizeof(screenBuffer)); until false; end. Во вторник мы Саней (Rzevsky) будем вешаться ;D ;D :D -------------------- Закон иудеев: Семь раз отмерь, один отрежь.
Закон экономии: Семь раз отмерь, семь раз отрежь. Закон программиста: Семь раз отрежь, ошибся, отмерь. |
![]() ![]() |
![]() |
Текстовая версия | 29.07.2025 18:13 |