Статистика |
Онлайн всего: 1 Гостей: 1 Пользователей: 0 |
|
1593.
Julia
(27.04.2008 15:33)
0
помогите пожайлуста решить задачки.... 1)дано натуральное число, удалить все цифры А(А вводится с клавиатуры) 2)найти все числа от 1 до 200,у которых количество делителей равно N(N вводится с клавиатуры) 3)найти сумму чисел от 1 до 200,у которых 5 делителей. заранее благодарна.....)
Ответ: Скачайте исходный код программы - решения задачи у нас на сайте в разделе "Простые программы" № 51
|
1592.
red-white
(26.04.2008 08:40)
0
Я не уверен, что прошлое сообщение до вас дошло, поэтому отправлю ещё раз мой адрес tema290292@yandex.ru
|
1591.
Павел
(25.04.2008 18:09)
0
здравствуйте! помогите пожалуйста решить задачки: 1)Дано натуральное число: а)сколько чётных цифр в данном целом числе; б)верно ли, что в данном числе встречаются цифры А и В (А и В вводятся с клавиатуры).
пожалуйста опишите все подробно и самым легким способом! заранее спасибо!
Ответ: Вот, пожалуйста, с проверкой ввода исходного числа ======== VAR src, A, B, k: Longint; nums: array[0..9] of Integer; even_count: Integer; isA, isB: Boolean; ch: Char; BEGIN repeat Write(''Введите исходное целое число: ''); {$I-} ReadLn(src); {$I+} k := IOResult; if k <> 0 then WriteLn('' Ошибка ввода! Попробуйте еще раз'') until k = 0; k:=src; {save} repeat inc(nums[k mod 10]); k := k div 10; until k = 0; for k:=0 to 9 do if nums[k] <> 0 then WriteLn(k:2,'' '',nums[k]); even_count := 0; {число четных} for k := 0 to 9 do if NOT odd(k) then inc(even_count, nums[k]); WriteLn(''В числе '',src,'' количество четных цифр = '',A); Write(''Введите число A: ''); repeat ch := ReadKey; until ch in [''0'' ..''9'']; WriteLn(ch); VAL(ch, A, even_count); Write(''Введите число B: ''); repeat ch := ReadKey; until ch in [''0'' ..''9'']; WriteLn(ch); VAL(ch, B, even_count); isA := nums[A] <> 0; isB := nums[B] <> 0; WriteLn(''Насчет A: '',isA,'', насчет B: '',isB); END. Или скачайте исходный код у нас на сайте в разделе "Простые программы" № 49
|
1590.
Юлия
(25.04.2008 17:52)
0
Здравствуйте!Помогите решить задачу... 1.Найти все натуральные числа a, b и c из интервала от 1 до 20, для которых выполняется равенство: a*a + b*b = c*c.
Ответ: Вот так это можно сделать: ===== VAR a, c: Integer; b: Real; BEGIN {Самым простым способом - перебором, хотя есть методы и получше} for c := 1 to 20 do for a := 1 to c-1 do begin b := SQRT(c*c - a*a); if int(b) = b then WriteLn(''a = '',a:3,'', b = '',b:3:0,'', c = '',c:3, '': '', a*a:6,'' + '',b*b:6:0,'' = '',c*c:6); end; END. Исходный код можно скачать на нашем сайте в разделе "Простые программы" №50
|
1589.
Павел
(25.04.2008 08:34)
0
Здравствуйте! помогите пожалуйста решить мне две задачи, а то я немогу из решить да же нет не каких мыслей! 1 Найти сумму чётных делителей натурального числа. 2Найти все равновеликие прямоугольные треугольники, катеты которых выражены целыми числами a и b, а площадь равна S (a и b принадлежит интервалу от 1 до 20, а S вводится с клавиатуры).
Ответ: Это не сложно :) Первая: VAR Num, k, count, Sum: Word; BEGIN Write(''Введите целое положительное число: ''); ReadLn(Num); Sum := 0; count:=0; {Подсчитывает число делителей. Фактически: простое ли?} for k:=2 to Num-1 do if Num mod k = 0 then begin count := count +1; if NOT odd(k) then Sum := Sum + k; end; if (count = 0) and (Num > 1) then WriteLn(''Число '',Num,'' - простое'') else WriteLn(''Сумма четных делителей равна '',Sum); END. ----------- Вторая: VAR b: Real; a, S, count: Word; BEGIN Write(''Введите площадь треугольника S: ''); ReadLn(S); count:=0; {Число "таких" прямоугольников - а вдруг нет вообще} if S > 1 then for a:=1 to 20 do begin b := S - a*a; if b > 0 then begin b:=SQRT(b); if trunc(b) = b then {b- целое} begin inc(count); WriteLn(a:2,'' '',b:4:0); end end; end; if count = 0 then WriteLn(''Треугольников нет''); END.
|
1588.
Gonz
(24.04.2008 19:00)
0
Спасибо, буду пробовать=) "а в моем примере именно ROUND" при округлении числа 23568,9 получится 23569, т.е уже отличается от "оригинала". а trunc ведь просто отбросит дробную часть.
Ответ: :) Таки округлять нужно. Я убедился в этом, когда сам графики рисовал и деления наносил. Вот именно ТАМ эта задача нужна практически - автоматически определить цену деления
|
1587.
red-white
(24.04.2008 08:55)
0
Здравствуйте. У меня такой вопрос. Где можно взять руские шрифты для графического режима Паскаля. А то у меня в текстовом формате с русским языком работать можно, а в графическом нет
Ответ: Есть у меня. Есть и программа, которая позволяет редактировать BGI-шрифты. Напишите, куда прислать. --- ЗЫ: Ваше сообщение не буду активизировать, так что спамерам Ваш адрес обломится :) Уж больно много их пытается у нас разместить свою фигню
|
1586.
Gonz
(23.04.2008 19:03)
0
А если при помощи прерывания 10h переключить активную страницу, то write и writeln будут работать с ней или с 0-ой? просто я щас пробовал сделать другую страницу активной, то там ничего не выводилось. asm mov ah, 05h; mov al, 1; int 10h; end; вот если так переключать.
Ответ: Если используется стандартная процедура Write (WriteLn), то это и не может привести к хорошему результату: я уже писал, что во всех функциях вывода $10-го прерывания номер страницы для отображения указывается ЯВНО (обычно в регистре BH). Так что во Write "зашита" нулевая страница
|
1585.
Gonz
(23.04.2008 18:38)
0
Спасибо большое. а вот по какому адресу находятся остальные 7 страниц? Кстати, насчет предыдущего поста Евгения - то лучше использовать вместо round - trunc.
Ответ: :) Я не разбирал его программу - а в моем примере именно ROUND. Все остальное может дать неправильное округление
Адреса вычисляются так: $B800:0000 - нулевая (под Windows рекомендуется использовать не $B800, а константу SegB800 - ее действительное значение определяется при запуске программы. Так написано, но пока я всегда находил именно там). Размер страницы 80*2*25 = 4000. То есть с адреса SegB800:4000 начинается вторая, и т.д. ...
|
1584.
Евгений
(23.04.2008 17:52)
0
Спасибо Вам, Борис, за ответ!
Действительно, просто.
...А к чему программа - не очень понял ......Да, собственно в виде иллюстрации, примера, так сказать...
|
1583.
Евгений
(23.04.2008 13:53)
0
Здравствуйте, Борис! Подскажите, пожалуйста, есть ли в Паскале функция округления числа до конкретного количества знаков после запятой. Например, число 2,356897111022 округлить до четвертого знака после запятой, т.е для расчета получить число 2,3569. В данном случае получается, просто надо отбросить лишние значения. ================================================================== Программа работает, но уж очень большую погрешность расчетов имеет (массивы использовать нельзя - условие такое) ================================================================== =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=- { найти сумму N элементов поледовательности: X(i)=0.7X(i-1)^3+0.3X(i-2)-0.1X(i-3) при X(0)=X(1)=X(2)=1
X(i-1) и др. - это так обозначил индекс } Program Summa; Uses CRT; Const N = 7; Var sum, d, Q, R, Z : Real; i : integer; BEGIN Q := 1; R := 1; Z := 1; sum := 0; For i := 1 to N do begin d := 0.7*sqr(Q)*Q+0.3*R-0.1*Z; sum := sum + d; R := Q; Z := R; Q := d; WriteLn(''***********************''); WriteLn(''Promezhutochnoe d '',d:9:8); WriteLn(''Promezhutochnya summa '',sum:9:8); WriteLn(''***********************''); end; WriteLn(''Summa '',N,'' elementov sostavlyaet '',sum:9:8); WriteLn(''================================================''); ReadKey END. =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
Ответ: На самом деле очень просто: a := round(a * 1000)/ 1000;
В вашем случае: a := round(2,356897111022*10000)/10000; -- А к чему программа - не очень понял
|
1582.
Gonz
(22.04.2008 20:25)
0
Так что с моим вопросом?
Ответ: Времени было мало :( Ответ вот: в том текстовом режиме, который среда разработки Borland Pascal (Turbo.exe - это тоже) использует, имеется 8 видеостраниц. Причем программа, написанная здесь, имеет доступ только к первой (номер 0). Средств работы с ними в Borland Pascal не предусмотрено. (Выбор активной видимой (отображаемой) страницы делает функция 5 прерывания 10h. Все функции вывода этого прерывания требуют указывать, на какую видеостраницу следут направить вывод). Повторюсь, в Паскале вывод только на первую (нулевую). Так что, либо использовать ассемблерные вставки, либо использовать память, отведенную под эти страницы, по своему усмотрению. Например, так формировать какой-то образ, а потом переносить его на видимую нулевую. Я как-то "копал" исходники и выяснил, что именно так восстанавливается изображение, которые было закрыто выпадающим меню, другим окном .... Вот простой пример: вывожу нечто на экран. После нажатия клавиши стираю. После еще одного нажатия восстанавливаю: ------ uses CRT; var x, y, size: Word;
BEGIN TextAttr:=7; ClrScr; size := (80*2)*25; {Узнаешь цифры?}
WriteLn(''asdjkfjsdljkfhl''); TextColor(green); WriteLn(''1265''); GotoXY(20,13); TextBackground(lightred); TextColor(white); WriteLn(''ggggggg''); MOVE(Ptr(SegB800, 0)^, Ptr(SegB800, size+1)^, size); x:=WhereX; y:=WhereY; ReadKey; ClrScr; ReadKey; MOVE(Ptr(SegB800, size+1)^, Ptr(SegB800, 0)^, size); GotoXY(x,y); ReadKey END.
|
1581.
Gonz
(20.04.2008 21:46)
0
Здраствуйте. У меня такой вопрос: есть ли в текстовом режиме видео-страницы(если конечно их можно так назвать)? если есть, то как с ними работать?
|
1580.
Рябикин Геннадий
(20.04.2008 11:29)
0
Я отправлял программу написаную мной! И текст её написания! Там указано моё имя вы поместили её на сайт? Как мне узнать? И Куда? Её название KK. Вот код: program KK;
var
a,x,b,c:real;
begin
writeln(''Автор: Рябикин Геннадий'');
writeln(''Что бы программа извлекала корень введите (1), что бы возводила в квадат введите (2)'');
write(''Enter='');read(x);
while x=1 do
begin
writeln(''Программа будет извлекать корень'');
write(''Введите число='');read(b);
a:=(sqrt(b));
write(''Корень из '');write(b:6:2);write('' Равен='',a:6:2);
readln(c);
end;
while x=2 do
begin
writeln(''Программа будет возводить в квадат'');
write(''Введите число='');read(b);
a:=(sqr(b));
write(b:6:2);write('' в квадрате='',a:6:2);
readln(c);
end;
end.
Ответ: Программа слишком простая. И кроме того, если сначала введем "1"Б а потом "4", то выполнится и возведение в квадрат, чего явно не желали Такие вещи нужно делать, по крайней мере, через CASE
|
1579.
Евгений
(17.04.2008 14:24)
0
Здравствуйте, Борис! Перешел к изучению функций и процедур, ну и сразу же вопросик: написал минипрограммку, а в ней что-то напутал, помогите разобраться, пожалуйста. ============= ============= Дана целочисленная прямоугольная матрица. Определить: Количество строк, не содержащих ни одного нулевого элемента (оформить в виде функции, результат подпрограммы вывести в главной программе)
=========================== Program Var1; Uses CRT; Const N=5; M=7; Type mas = array[1..N,1..M] of integer; Var a : mas; f_in : text; i, j : integer; {---------------------------------------------} Function nol(const L:mas):integer; Var i, j, k : integer; Begin
For i:=1 to N do k:=0; For j:=1 to M do begin if L[i,j] <> 0 then inc(k); nol:=k; end end;
{---------------------------------------------} Begin {$I-} assign(f_in,''e:PAStext2.txt''); reset(f_in);
if IOResult <> 0 then begin WriteLn(''Файл text2.txt не найден''); exit; end; {$I+}
For i:=1 to N do For j:=1 to M do Read(f_in,a[i,j]);
if nol(a) <> 0 then writeln(''Строк без нулей - '',nol(a)); if nol(a) = 0 then writeln(''Строк без нулей нет'');
ReadKey end.
========================================================== ==========================================================
Сама матрица: 1 1 1 1 1 1 1 0 2 2 2 2 2 2 3 3 3 3 3 3 3 4 0 4 4 4 4 4 5 5 5 5 5 5 5 ==================== У меня получается 7
------------ Евгений -----------
Ответ: В таких случаях рекомендуется пройтись с ручкой в руках (самому выполнить все действия). Можно, конечно, с помощью отладчика, нажимая F7 и наблюдая, как изменяются переменные при выполнении строчек программы. Удобно нажав Crtl+F7 установить, как это по-русски, наблюдателя, что-ли за значением переменной. В подпрограмме это k, i, j. Тогда сразу поймете, что 7 - это ЧИСЛО НЕНУЛЕВЫХ ЭЛЕМЕНТОВ В ПОСЛЕДНЕЙ СТРОКЕ МАТРИЦЫ!!! Сумеете сами исправить дефект? Подсказка: нужна еще одна переменная
|
|
|
|