![]() |
1. Заголовок темы должен быть информативным. В противном случае тема удаляется ...
2. Все тексты программ должны помещаться в теги [code=pas] ... [/code].
3. Прежде чем задавать вопрос, см. "FAQ", если там не нашли ответа, воспользуйтесь ПОИСКОМ, возможно такую задачу уже решали!
4. Не предлагайте свои решения на других языках, кроме Паскаля (исключение - только с согласия модератора).
5. НЕ используйте форум для личного общения, все что не относится к обсуждению темы - на PM!
6. Одна тема - один вопрос (задача)
7. Проверяйте программы перед тем, как разместить их на форуме!!!
8. Спрашивайте и отвечайте четко и по существу!!!
![]() |
sandman |
![]() ![]()
Сообщение
#1
|
Пионер ![]() ![]() Группа: Пользователи Сообщений: 101 Пол: Мужской Репутация: ![]() ![]() ![]() |
Нашел тут в своей файлопомойке несколько лаб... может быть кому нужны...
На лаконичность кода ЭТО не претендует... Если чего еще найду - закину 1: Код {Из элементов массива A(2n) получить массивы B(n) и C(n) следующим образом. Выбрать в массиве A два наиболее близких по значению элемента; меньший из них поместить в массив B, а больший в массив C. Продолжить выбор из оставшихся элементов до полного заполнения массивом B и C.} {$R-} program Neighbours; type arr1=array[1..1] of integer; arr1Pointer=^arr1; var dynArray, small1, small2: arr1Pointer; counter, k, m: integer; { counter - вводимое количество элементов массива k - число элементов малого массива m - номер элемента, удаляемого процедурой delElem } procedure CreateMainArr(var counter:integer); {создание основного динамического массива и заполнение его числами} var i, j: integer; begin repeat write('Введите чётное число элементов массива: '); {размер массива} readln(counter); until (counter mod 2)=0; {число элементов массива должно быть четным} getMem(dynArray,counter*sizeOf(integer)); writeln('Значение любого элемента не должно превышать 32766!'); for i:=1 to counter do begin write('Введите ',i,' элемент: '); readln(j); if j>=maxint then begin writeln('!недопустимое число! попробуйте еще раз...'); write('Введите ',i,' элемент: '); readln(j); end else dynArray^[i]:=j; {заполнение массива значениями} end; end; {выделение памяти под два малых массива, с кол-вом элементов в 2 раза меньше, чем в основном} procedure CreateTwoSmallArrays(const counter:integer); begin k:=counter div 2; writeln('Создание массивов...'); getMem(small1,k*sizeOf(integer)); getMem(small2,k*sizeOf(integer)); end; {распределение чисел между массивами} procedure MoreOrLess(const counter:integer); var l, p, i, j, x: integer; begin {сортировка пузырьком} p:=1; for i:=1 to counter-1 do begin for j:=i+1 to counter do begin if dynArray^[i]>dynArray^[j] then begin x:=dynArray^[i]; dynArray^[i]:=dynArray^[j]; dynArray^[j]:=x; end; end; end; {распределение элементов по малым массивам (парами)} i:=0; repeat small1^[p]:=dynArray^[i+1]; small2^[p]:=dynArray^[i+2]; inc(p); i:=i+2; until i=counter; end; begin CreateMainArr(counter); CreateTwoSmallArrays(counter); MoreOrLess(counter); writeln('Первый массив:'); {массив B} for m:=1 to k do begin write(small1^[m],' '); end; writeln; writeln('Второй массив:'); for m:=1 to k do {массив C} begin write(small2^[m],' '); end; writeln; k:= counter div 2; writeln('Очистка памяти...'); freeMem(dynArray,counter*sizeOf(integer)); freeMem(small1,k*sizeOf(integer)); freeMem(small2,k*sizeOf(integer)); readln; writeln('ok') end. 2 поинтересней ![]() Код {Заданное число (не обязательно целое) отложить на бухгалтерских счётах, изображённых на экране.} program Counters; uses crt, graph; var s, d, e, sd, dd, ed, code: integer; { s - количество сотен во введенном числе d - количество десятков e - кол-во единиц sd - кол-во тысячных долей dd - кол-во сотых долей ed - кол-во десятых } {обработка введенного пользователем числа} procedure InputAndProcess; var a:real; n:string; i:integer; begin repeat writeln('ВНИМАНИЕ! будут обработаны только первые 3 знака после запятой!'); write('введите число < 1000 (необязательно целое): '); readln(a); clrscr; until a<1000; str(a:5:3,n); for i:=2 to length(n) do {разделение целой и дробной частей} begin if n[i]='.' then begin if i=4 then begin val(n[1],s,code); val(n[2],d,code); val(n[3],e,code); end; if i=3 then begin s:=0; val(n[1],d,code); val(n[2],e,code); end; if i=2 then begin s:=0; d:=0; val(n[1],e,code); end; val(n[i+1],ed,code); val(n[i+2],dd,code); val(n[i+3],sd,code); break; end; end; end; {создание основы счет (без делений)} procedure Bones; var driver, mode, codeError:integer; i, j, x0, y0:integer; begin Driver:=Detect; InitGraph(driver,mode,''); if GraphResult <>0 then writeln(GraphErrorMsg(Codeerror)); x0:=GetMaxX; y0:=GetMaxY; SetBkColor(black); SetColor(brown); SetLineStyle(0,3,3); line(round(x0)div 3, (round(y0) div 5) , (round(x0) div 3)*2, round(y0)div 5); line((round(x0)div 3)*2, round(y0) div 5, (round(x0) div 3)*2,(round(y0)div 5)*4); line((round(x0)div 3)*2,(round(y0) div 5)*4, round(x0)div 3, (round(y0)div 5)*4); line(round(x0)div 3, (round(y0) div 5)*4, round(x0) div 3, round(y0) div 5); j:=(round(y0)div 5)+(((round(y0)div 5)*4) div 9)-4; SetLineStyle(0,3,1); for i:=1 to 6 do begin moveto(round(x0)div 3,j); lineto((round(x0)div 3)*2,j); j:=j+(((round(y0)div 5)*4) div 9); end; end; {добавление какого-либо количества делений справа} procedure AddToRight; var x, y, xtemp, x0, y0, i: integer; begin SetFillStyle(1,brown); x0:=GetMaxX; y0:=GetMaxY; {сотни} if s<>0 then x:=(((round(x0)div 3)*2)-7); y:=((round(y0)div 5)+(((round(y0)div 5)*4) div 9)-4); for i:=1 to s do begin pieslice(x,y,0,360,6); x:=x-14; end; {десятки} if d<>0 then x:=(((round(x0)div 3)*2)-7); y:=((round(y0)div 5)+((((round(y0)div 5)*4) div 9)*2)-4); for i:=1 to d do begin pieslice(x,y,0,360,6); x:=x-14; end; {единицы} if e<>0 then x:=(((round(x0)div 3)*2)-7); y:=((round(y0)div 5)+((((round(y0)div 5)*4) div 9)*3)-4); for i:=1 to e do begin pieslice(x,y,0,360,6); x:=x-14; end; {десятые доли} if ed<>0 then x:=(((round(x0)div 3)*2)-7); y:=((round(y0)div 5)+((((round(y0)div 5)*4) div 9)*4)-4); for i:=1 to ed do begin pieslice(x,y,0,360,6); x:=x-14; end; {сотые доли} if dd<>0 then x:=(((round(x0)div 3)*2)-7); y:=((round(y0)div 5)+((((round(y0)div 5)*4) div 9)*5)-4); for i:=1 to dd do begin pieslice(x,y,0,360,6); x:=x-14; end; {тысячные доли} if sd<>0 then x:=(((round(x0)div 3)*2)-7); y:=((round(y0)div 5)+((((round(y0)div 5)*4) div 9)*6)-4); for i:=1 to sd do begin pieslice(x,y,0,360,6); x:=x-14; end; end; {добавление какого-либо количества делений слева} procedure AddToLeft; var s1, d1, e1, sd1, dd1, ed1, x, y, x0, y0, i: integer; begin s1:=9-s; d1:=9-d; e1:=9-e; sd1:=9-sd; dd1:=9-dd; ed1:=9-ed; SetFillStyle(1,brown); x0:=GetMaxX; y0:=GetMaxY; {сотни} if s1<>0 then x:=((round(x0)div 3)+7); y:=((round(y0)div 5)+(((round(y0)div 5)*4) div 9)-4); for i:=1 to s1 do begin pieslice(x,y,0,360,6); x:=x+14; end; {десятки} if d1<>0 then x:=((round(x0)div 3)+7); y:=((round(y0)div 5)+((((round(y0)div 5)*4) div 9)*2)-4); for i:=1 to d1 do begin pieslice(x,y,0,360,6); x:=x+14; end; {единицы} if e1<>0 then x:=((round(x0)div 3)+7); y:=((round(y0)div 5)+((((round(y0)div 5)*4) div 9)*3)-4); for i:=1 to e1 do begin pieslice(x,y,0,360,6); x:=x+14; end; {десятые доли} if ed1<>0 then x:=((round(x0)div 3)+7); y:=((round(y0)div 5)+((((round(y0)div 5)*4) div 9)*4)-4); for i:=1 to ed1 do begin pieslice(x,y,0,360,6); x:=x+14; end; {сотые доли} if dd1<>0 then x:=((round(x0)div 3)+7); y:=((round(y0)div 5)+((((round(y0)div 5)*4) div 9)*5)-4); for i:=1 to dd1 do begin pieslice(x,y,0,360,6); x:=x+14; end; {тысячные доли} if sd1<>0 then x:=((round(x0)div 3)+7); y:=((round(y0)div 5)+((((round(y0)div 5)*4) div 9)*6)-4); for i:=1 to sd1 do begin pieslice(x,y,0,360,6); x:=x+14; end; end; begin InputAndProcess; Bones; AddToRight; AddToLeft; readln; closegraph; writeln('.'); readln; end. -------------------- Плавают разными стилями, тонут-одним (ц) Кирпичи
|
![]() ![]() |
![]() |
Текстовая версия | 19.07.2025 14:04 |