Статистика |
Онлайн всего: 1 Гостей: 1 Пользователей: 0 |
|
1518.
Евгений
(16.01.2008 21:31)
0
Огромное спаибо за помощь. Очень своевременно.
Выкладываю сам текст задачи и ее решение для общего пользования. Сами программные файлы (.exe) отослал на почту владельцу сайта (Борису), думаю, что в скором времени они появятся в разделе закачек. ================================================================================================================
Program Var__11;
Uses Crt; {Podklyuchenie modulya CRT} Var N,i : integer; {Ob''yavlenie peremennyh} X,Y : Array [1..20] of real; {Ob''yavlenie massivov} Begin ClrScr; {Ochistka ekrana}
TextColor(LightCyan); {Cvet teksta LightCyan} WriteLn('' USLOVIE:''); {Nadpis''} WriteLn; {Hudozhestvennoe oformlenie - propusk stroki} WriteLn(''Iz posledovatel''''nosti chisel A1, A2, ..., A20'');{Tekst zadachi} WriteLn(''vybrat'''' celye polozhitel''''nye chisla.''); WriteLn; {Hudozhestvennoe oformlenie - propusk stroki} WriteLn(''-----------------------------------------''); {Hudozhestvennoe oformlenie - liniya} WriteLn; {Hudozhestvennoe oformlenie - propusk stroki} WriteLn(''Programmu resheniya zadachi sostavil:''); {Avtorskie dannye} WriteLn('' Gorbunov Evgeniy Grigor''''evich''); WriteLn; {Hudozhestvennoe oformlenie - propusk stroki} WriteLn(''=========================================''); {Hudozhestvennoe oformlenie - liniya} WriteLn; {Hudozhestvennoe oformlenie - propusk stroki}
TextColor(LightGreen); {Cvet teksta LightGreen}
Write(''Vvedite chislo elementov massiva: N= ''); {Vvod chisla elementov massiva} ReadLn(N); WriteLn; {Hudozhestvennoe oformlenie - propusk stroki}
TextColor(LightMagenta); {Cvet teksta LightMagenta} WriteLn(''Vvedite elementy massiva: ''); {Vvod elementov massiva}
For i := 1 to N do begin Write(''X ['' ,i, '']= ''); ReadLn(X[i]) end;
TextColor(LightRed); {Cvet teksta - LightRed} WriteLn; {Hudozhestvennoe oformlenie - propusk stroki} WriteLn(''=========================================''); {Hudozhestvennoe oformlenie - liniya} WriteLn; {Hudozhestvennoe oformlenie propusk stroki} Write(''O T V E T: Poluchenniy massiv: ''); {Hudozhestvennoe oformlenie - oformlenie otveta}
For i:=1 to N do begin if frac(X[i])=0 then Y[i]:=X[i]; {Analiz drobnoy chasti i prisvoenie znacheniy drugomu massivu} if Y[i]>0 then write(Y[i]:5:0); {Opredelenie polozhitel''nogo chisla i vyvod rezul''tatov}
end; readkey; {Ozhidanie nazhatiya lyuboy klavishi} end.
================================================================================================================
|
1517.
Евгений
(16.01.2008 02:09)
0
Доброго времени суток!
Помогите, пожалуйста! Как выбрать из массива с вещественным типом данных элементы целого типа? Использование функции mod работает только с Integer, а у меня Real.
Вот простейшая программка с данной проблемой - не идет!
Program ZADANIE_1122222;
Uses Crt; {Подключение модуля CRT} Var N,i : integer; X : Array [1..20] of real; Begin ClrScr; {Очистка экрана} Write(''Введите число элементов массива: N= ''); {Ввод числа элементов массива} ReadLn(N); WriteLn(''Введите элементы массива: ''); {Ввод элементов массива} For i := 1 to N do begin Write(''X ['' ,i, '']= ''); ReadLn(X[i]) end; For i:=1 to N do {Это попытка произвести целочисленное деление, но компилятор не пропускает, не те типы данных} begin if X[i] mod 1=0 then writeLn(X[i]); end; end.
С уважением, Евгений.
Ответ: Функция FRAC возвращает дробную часть числа. То есть, можно написать if frac(X[i]) = 0 then ... В данном случае получите хороший результат
|
1516.
Baxtiyor
(15.01.2008 13:23)
0
Здраcтвуйте Бориc .Отправленные задача к Вам было узбекиcком языке, я толъком не cмог переводитъ на руccкой .Извените за беcпакойcтво.Я другой задачу к Вам отправлю.
Лиcтом дерева называетcя вершина, не являюшаяся корнем никакого поддерева.Cоcтавитъ процедуру подсчета числа листъев заданного бинарного дерева.
Спосибо зарание. Бахтиер.
Ответ: Привет Вот программа. В ней я как-то реализовывал сортировку строк с помощью бинарного дерева (чтобы считать листья - нужно дерево). Вставил процедуру и функцию - оба делают одно и тоже: процедура с помощью глобальной переменной, а функция - с помощью локальной. -- {$M 65520, 0, 655360} program trees; uses crt; type pTree=^Tree; Tree=record name :string[10]; left :pTree; right :pTree end; var s:string; t,v:pTree; n,i:integer;
procedure insert(var t:pTree; x:string); begin If t = nil then begin new(T); t^.name:=x; t^.left:=nil; t^.right:=nil end else if t^.name>=x then insert(t^.left,x) else insert(t^.right,x) end;
procedure obhod(t:pTree); begin if t<>nil then begin obhod(t^.left); writeln(t^.name); obhod(t^.right) end; end;
var count: Integer; procedure list_count(t: pTree); begin if (t^.left = nil) and (t^.right = nil) then inc(count); if t <> nil then begin list_count(t^.left); list_count(t^.right) end end;
function flist_count(t: pTree): Integer; var c: Integer; begin if (t^.left = nil) and (t^.right = nil) then c:=1 else c:=0; if t <> nil then begin inc(c, flist_count(t^.left)); inc(c, flist_count(t^.right)) end; flist_count := c end;
procedure freetree(var t: pTree); begin if t <> nil then if t^.left <> nil then freetree(t^.left); if t^.right <> nil then freetree(t^.right); dispose(t) end;
var ma: longint; k: Integer; begin clrscr; ma:=Memavail; {Для проверки правильности очистки}
writeLn(''''Введите слова (символ окончания - пустая строка):''''); textcolor(15); t:=nil; repeat readln(s); if s <> '''''''' then insert(t,s) until s = ''''''''; writeln(''''словарь:''''); textcolor(lightblue); obhod(t);
count := 0; list_count(t); WriteLn(''''COUNT = '''', count); WriteLn(''''COUNT2 = '''', flist_count(t));
textcolor(7); freetree(t); Writeln(''''Потеря памяти: '''', ma - MemAvail); writeLn(''''Нажмите любую клавишу ...''''); readKey end.
|
1515.
Евгений
(13.01.2008 17:55)
0
Доброго Вам времени суток!
Помогите, пожалуйста, разобраться с программкой: не могу избавиться от нулевых значений в получающемся массиве, т.е. на месте исходных отрицательных и нулевых значений остаются нули, а в остальном работает без проблем... С уважением, Евгений. egg-68@mail.ru ========================================= Вот текст программы: ========================================= =========================================
{Iz posledovatel''nosti chisel A1, A2, ..., A20 vybrat'' celye polozhitel''nye chisla} {=================================================================================}
Program ZADANIE_11; Uses Crt; {Podklyuchenie modulya CRT} Var k,N,i : integer; X,Y,Q,Z : Array [1..20] of real; Begin ClrScr; {Ochistka ekrana} Write(''Vvedite chislo elementov massiva: N= ''); {Vvod chisla elementov massiva} ReadLn(N); WriteLn(''Vvedite elementy massiva: ''); {Vvod elementov massiva} For i := 1 to N do begin Write(''X ['' ,i, '']= ''); ReadLn(X[i]) end; k:=0; {Ustanovka znacheniya k v nol''} For i:=1 to N do if X[i]>0 then {Vybor polozhitel''nyh chisel iz massiva} begin k:=k+1; Y[k]:=X[i] end else k:=k+1;
begin Q[i]:=i mod 1; {Celochislennoe delenie} if Q[i]=0 then {Esli net ostatka, to chislo celoe} begin k:=k+1; Z[k]:=Q[i] end else k:=k+1 end;
Write(''O t v e t: Poluchenniy massiv:''); For i:=1 to N do write(Y[i]:3:0); {Vyvod rezul''tatov na ekran} WriteLn('''');
WriteLn(''===============================''); {Hudozhestvennoe oformlenie} ReadLn; end.
Ответ: Как, написал выше, используйте функцию FRAC для того, чтобы определить есть дробная часть у числа или нет
|
1514.
Светлана
(13.01.2008 14:54)
0
в Задаче про FOR разобралась. Во-первых для него надо только тип integer, а во-вторых счетчик там вовсе не нужен )))
|
1513.
Светлана
(13.01.2008 14:05)
0
Выдает инвалида FOR program oskolki; {Решить задачу с использованием процедур с входными и выходными параметрами или функцией. Пусть требуется рассчитать число осколков, полученных в результате деления тела за N миллисекунд, если каждый осколок делится на два за одну милисекунду.} uses crt; var m,k:real;
function del(m:real):Real; begin del:=exp(ln(2)*m); end;
begin ClrScr; gotoxy(10,5); writeln(''Программа деления тела''); writeln; Write(''Введите количество милисекунд: ''); readln(m); m:=0; k:=1; for m:=m+1 to N do begin k:=del(m) end; writeln(''Из тела за '',m,'' милисекунд получится '',k,''осколков ''); readln; End.
|
1512.
Светлана
(13.01.2008 13:21)
0
Помогите, плиз наладить программки. Дана таблица: 8 наименований (строк), 4 столбца-показателя, некорректно идет сортировка - сортрует только первые 4. Надо чтобы в рез-те сортировки еще и выводила отсортированную таблицу. writeln(''б - Сортировка данных таблицы по возрастанию сахара: ''); writeln(st[0]); for i:=1 to 8 do {сортировка выбором. упорядочение массива???} begin mins:=mas[i,1]; {считаем i-й элем мминимальным} nmin:=i; {запоминаем номер эл-та} for n:=i to 8 do {поиск наименьшего из оставшихся} if mas[n,1]<mins then begin mins:=mas[n,1]; nmin:=n end; mas[nmin,1]:=mas[i,1]; {обмен наименьшего элемента} mas[i,1]:=mins; {с первым из оставшихся} writeln(st[nmin]); end; readln;
|
1511.
Александр
(13.01.2008 11:59)
0
Помогите кто-нибудь решить задачку ? Сколько кругов заданного радиуса r можно вырезать из правильного треугольника со стороной А ? заранее благодарен !!!
Ответ: То есть, сколько кругов заданного радиуса можно вписать в треугольник?
|
1510.
Санёк
(12.01.2008 18:43)
0
И еще один вопросик.Как записывать чтото в системный реестр.И желательно в автозапуск?Да!Я пытаюсь написать именно то, о чём вы подумали.Но он безвредный.(Будет).Я слыхал, что весь реестр хранится в двух какихто файлах в дике C в каталоге WINDOWS.Заранее благодарен.И плиз, не публикуйте это сообщение, отправте ответ по почте.
|
1509.
Санёк
(12.01.2008 18:15)
0
Обана!Это опять я.У меня вопрос.Нету ли у вас случайно, модулей, которые воспроизводят фоновую музыку?(Формат wav).Я гдето скачивал такие, но они не работают.В силу своей непредсказуемости, я стал предсказуемым :)
|
1508.
Наталья
(11.01.2008 15:45)
0
Это я прислала)) И вот последнее:
Описать рекурсивную функцию НОД(а,б) целого типа, находящую НОД двух натуральных а и б, используя алгоритм Евклида
Ответ: Проще всего это сделать с помощью процедуры-функции: ===== {НОД рекрсивной} function NOD(a, b: Integer): Integer; begin if a mod b = 0 then NOD:=b else NOD:=NOD(b, (a mod b)) end;
VAR a, b: Integer; BEGIN a:=91; b:=203; if b > a then begin {Меняем местами не используя третьей переменной. а - всегда должно быть большее} a:= a xor b; b:= b xor a; a:= a xor b; end; WriteLn(NOD(a,b)); END.
|
1507.
Наталья
(11.01.2008 10:47)
0
09.01.2008 19:57 Наталья Вы можете еще помочь мне? Записная книга. Составить программку о людях (в виде записей с полями: ФИО, город, улица, дом, квартира), и с процедурами 1)Чтоб можно было добавлять записи. 2)Организовать выбор людей, живущих на одной улице, с определенным названием. Полученный список упорядочить по номеру дома. спасибо В каком виде нужно хранить информацию о людях: 2) в виде списка (одностороннего хватит).
Ответ: Вот решение Вашей задачи (программа получается немалой - напишите адрес - пришлю исходник): ===== const fio_len = 40; city_len = 15; street_len = 12;
TYPE TBase = record fio : String[fio_len]; city : String[city_len]; street: String[street_len]; house : Byte; house_room: Byte; end;
PNode = ^TNode; TNode = record base : TBase; Next: PNode; end;
var Root: PNode;
function Create(aFIO, aCity, aStreet:String; aHouse, aHouse_room: Byte): PNode; var p: PNode; begin p:=nil; New(p); p^.base.fio := copy(aFIO, 1, fio_len); p^.base.city := copy(aCity, 1, city_len); p^.base.street:= copy(aStreet, 1, street_len); p^.base.house := aHouse; p^.base.house_room:= aHouse_room; p^.Next:=nil; Create:=p end;
procedure PrintOne(r: PNode); begin if r = nil then Exit; WriteLn(r^.base.fio); WriteLn(r^.base.city,'''' '''',r^.base.street,'''' '''', r^.base.house:3,'''' '''',r^.base.house_room:3); end;
procedure PrintAll(r: PNode); begin if r = nil then Exit; repeat PrintOne(r); r:=r^.Next until r = nil; end;
procedure Add(var root: PNode; aFIO, aCity, aStreet:String; aHouse, aHouse_room: Byte); var p: PNode; begin if root = nil then root:=Create(aFIO, aCity, aStreet, aHouse, aHouse_room) else begin p:=root; while p^.Next <> nil do p:=p^.Next; p^.Next:=Create(aFIO, aCity, aStreet, aHouse, aHouse_room); end end;
function AddFromKB(var r: PNode): Boolean; var f, c, s: String; h, hr: Byte; er: Integer; begin AddFromKB:=False; Write(''''Введите ФИО [<='''',fio_len,'''' букв]: ''''); ReadLn(f); if f = '''''''' then Exit; {пустой ввод символ окончания} Write(''''Введите город [<='''',city_len,'''' букв]: ''''); ReadLn(c); Write(''''Введите улицу [<='''',street_len,'''' букв]: ''''); ReadLn(s); repeat Write(''''Введите номер дома [число <= 255]: ''''); {$I-} ReadLn(h); {$I+} er:= IOResult; if er <> 0 then WriteLn('''' Ошибка ввода. Повторите''''); until er = 0; repeat Write(''''Введите номер квартиры [число <= 255]: ''''); {$I-} ReadLn(hr); {$I+} er:=IOResult; if er <> 0 then WriteLn('''' Ошибка ввода. Повторите''''); until er = 0; if r = nil then r := Create(f, c, s, h, hr) else Add(r, f, c, s, h, hr); AddFromKB := True end;
function SearchByStreet(r: PNode; StreetName: String): PNode; {Выдает в виде списка отсортированный} function UpRuss(s: String): String; var i: Integer; buf: String; begin buf:=s; for i:=1 to length(buf) do case buf[i] of ''''a''''..''''z'''': buf[i]:=UpCase(buf[i]); ''''а''''..''''п'''': buf[i]:=chr(ord(buf[i])-32); ''''р''''..''''я'''': buf[i]:=chr(ord(buf[i])-80); ''''ё'''': buf[i]:=''''Ё''''; end; UpRuss:=buf end; var m, p, s, min: PNode; buf : TBase; begin m:=nil; if r = nil then Exit; StreetName:=UpRuss(copy(StreetName, 1, street_len)); while (r <> nil) do begin if UpRuss(r^.base.street) = StreetName then Add(m, r^.base.fio, r^.base.city, r^.base.street, r^.base.house, r^.base.house_room); r:=r^.Next end; if m <> nil then begin p:=m; {Сортировка методом вставки} while p^.Next <> nil do begin s:=p^.Next; min:=p; while s <> nil do begin {Ищем минимальное} if s^.base.house < min^.base.house then min := s; s:= s^.Next end; if min <> p then begin buf:=p^.base; p^.base := min^.base; min^.base := buf; end; p:=p^.Next end; end; SearchByStreet:=m end;
procedure Destroy(var r: PNode); var p: PNode; begin if r = nil then Exit; while r^.Next <> nil do begin p:=r^.Next; Dispose(r); r:=p end; Dispose(r) end;
VAR p, list: PNode; n: Integer; Street: String; BEGIN Root:=nil; WriteLn(''''Заполнение базы данных''''); While AddFromKB(root) do WriteLn(''''--''''); PrintAll(root); WriteLn(''''============''''); list:=SearchByStreet(root, ''''aa''''); if list = nil then WriteLn(''''На улице '''',Street,'''' ничего не найдено'''') else PrintAll(list); Destroy(list); Destroy(Root); END.
|
1506.
Санёк
(10.01.2008 16:12)
0
Спасибо, все работает теперь.Но помогите, вот есть програмка.Это юнит.Там одна процедура draw выводит на экран 16-цветный рисунок BMP. Помогите, как переделать ее под 256- цветную? (Там надо изменить цветовую гамму, наверное.). Вот этот юнит: Drawing.PAS
Unit Drawing;
interface uses crt,dos,graph; var f,f1,f2,f3:text; n:integer; i:char; mesing:string[60]; hill:string[8]; adress,name,pass2:string[60]; procedure wait; procedure Draw(x0,y0: integer; fname: string; transparent: boolean); procedure input(a,b:integer;c:boolean);
implementation
procedure wait; begin while keypressed do i:=readkey; repeat until keypressed; end;
procedure Draw(x0,y0: integer; fname: string; transparent: boolean); label bye; const color: array[0..15] of byte = (0,4,2,6,1,5,3,7,8,12,10,14,9,13,11,15); type bmpinfo = record h1,h2:char; size,reserved,offset,b,width,height:longint; plans,bpp:word; end; var f:file of bmpinfo; bmpf:file of byte; info:bmpinfo; res,x,y,nb,np,i,j:integer; b,bh,b1,tpcolor:byte; begin assign(f,fname); {$I-} reset(f); {$I+} res:=ioresult; if res<>0 then begin goto bye;end; read(f,info); close(f); if info.bpp<>4 then begin goto bye;end; x:=x0; y:=y0+info.height; nb:=(info.width div 8)*4; if (info.width mod 8)<>0 then nb:=nb+4; assign(bmpf,fname); reset(bmpf); seek(bmpf,info.offset); if transparent then begin read(bmpf,b); tpcolor:=b shr 4; seek(bmpf,info.offset); end else tpcolor:=17; for i:=info.height downto 1 do begin np:=0; for j:=1 to nb do begin { if not eof(bmpf) then } read(bmpf,b); if np<info.width then begin bh:= b shr 4; if bh<>tpcolor then putpixel(x,y,color[bh]); inc(x); inc(np); end; if np<info.width then begin b1:= b and 15; if b1<>tpcolor then putpixel(x,y,color[b1]); inc(x); inc(np); end; end; x:=x0; dec(y); end; close(bmpf); bye: end;
procedure input(a,b:integer;c:boolean); begin setfillstyle(1,0); mesing:=''''; repeat if c then begin pass2:=''''; for n:=1 to length(mesing) do pass2:=pass2+''*''; outtextxy(a,b,pass2+''_''); end else outtextxy(a,b,mesing+''_''); i:=readkey; if (i<>chr(8)) and (i<>chr(13)) then mesing:=mesing+i; if i=chr(8) then begin mesing:=copy(mesing,1,length(mesing)-1); end; if i=chr(13) then a:=a+8; bar(a+length(mesing)*8-8,b,a+length(mesing)*8+16,b+10); until i=chr(13); end; end.
Ответ: Еще не анализировал, но первая мысль: у Вас определены цвета от 0 до 15, а нужно до 255!!! Напишите себе программу - закрашенные прямоугольнички, чтобы представлять себе соответствие между номером и цветом
|
1505.
(10.01.2008 15:00)
0
""В каком виде нужно хранить информацию о людях: 1) в виде массива фиксированного размера; 2) в виде списка (одностороннего хватит). "" В виде списка надо
|
1504.
(09.01.2008 22:33)
0
Извините, я насчет задачки (Описать процедуру, находящую кол-во цифр,данного целого положительного числа к, и их сумму) я не сказала что ее надо чисто арифметически решить... в процедуру только одну переменную ввести надо само число к... вот сама написала, только помогите найти ошибку (и если мона исправить):
procedure INTOJ(k:longint); var c,s:longint; begin c:=0; while (k div 10)<>0 do begin k:=k div 10; c:=c+1; end;
s:=0; while (k div 10)<>0 do begin s:=s+(k mod 10); k:=k div 10; end; end; var g:longint;
begin writeln(''vvedite cislo''); readln(g); INTOJ(g); Writeln(c,s) end.
Ответ: В процедуре подсчитывается число цифр в переменной с. Но ее значение теряется при выходе из подпрограммы. Два основных пути решения проблемы: 1) объявить с глобальной переменной. То есть, перенести VAR C: Longint; выше процедуры. Кстати, хватит и байта :)) 2) объявить INTOJ функцией и присвоить ей значение с
|
|
|
|