Программирование
Лабораторная работа, 13 Апреля 2012, автор: пользователь скрыл имя
Описание работы
1. Найдите произведение всех простых делителей заданного числа.
2. Дана последовательность из N целых чисел. Определите коли-
чество чисел в наиболее длинной подпоследовательности из подряд идущих нулей.
3. Не используя стандартных функций (за исключением abs) вычислить с точностью y=ln (1+x)/(1-x)=2(x+(x^3/3)+(x^5/5)+...+(x^2n+1)/(2n+1)+...) при (|x|<1). Считается, что требуемая точность достигнута, если очередное слагаемое по модулю меньше abs.
Работа содержит 1 файл
Лабораторная 2.docx
— 24.96 Кб (Скачать)1. Найдите произведение
всех простых делителей
2. Дана последовательность из N целых чисел. Определите коли-
чество чисел в наиболее длинной подпоследовательности из подряд идущих нулей.
3. Не используя
стандартных функций (за исключением abs)
вычислить с точностью y=ln (1+x)/(1-x)=2(x+(x^3/3)+(x^5/
Ответы:
№1
- var
- n,i:integer;
- begin
- write('N=');
- readln(n);
- for i:=1 to n do
- if n mod i=0 then
- writeln('Naiden delitel:',i);
- end.
№2 (Дано натуральное число N (N>9). Определить количество нулей, идущих подряд в младших разрядах данного числа. Пример. N=1020 000. Количество нулей равно четырем.)
- uses crt;
- var n:longint;
- k:byte;
- begin
- clrscr;
- repeat
- write('Введите натуральное число n>9 n=');
- readln(n);
- until n>9;
- k:=0;
- while(n>0)and(n mod 10=0) do
- begin
- k:=k+1;
- n:=n div 10;
- end;
- write('Количество нолей в младших разрядах=',k);
- readln
- end.
Или
Определить количество чисел в наиболее длинной последовательности из подряд идущих нулей.
// Дана последовательность из 100 целых чисел.
// Определить количество
чисел в наиболее длинной
#include "stdafx.h"
#include <stdlib.h>
#include <time.h>
#include <stdio.h>
const int N = 100;
int a[N];
int _tmain(int argc, _TCHAR* argv[])
{
// Инициализация и печать массива
srand((unsigned)time(NULL));
for(int i=0; i<N; i++) {
a[i] = int((rand()/(double)RAND_MAX) * 3.0);
printf(" %d", a[i]);
}
// Поиск наиболее длинной последовательности из подряд идущих нулей
int max_start = -1;
int max_length = 0;
int cur_start = -1;
int cur_length = 0;
for(int i=0; i<N; i++) {
if (a[i]==0) {
cur_length++;
if (cur_start < 0) cur_start = i;
}
else {
if (cur_length > max_length) {
max_length = cur_length;
max_start = cur_start;
}
cur_length = 0;
cur_start = -1;
}
}
if (max_start < 0)
printf("\n\nV massive net nulevyh elementov!\n\n");
else
printf("\n\nNachalo posledovatelnosti: %d, dlina: %d\n\n", max_start, max_length);
return 0;
}
Или
- 5.42. Программа. Дана последовательность из 100 целых чисел. Определить количество чисел в наиболее длинной последовательности из подряд идущих нулей.
PROGRAM OpredelitSkolkoMaxPodradNulei(
VAR x: ARRAY[1..100] OF INTEGER;
skolkoUzhePodriadNulei,
skolkoMaxPodriadNulei:INTEGER;
j:INTEGER;
BEGIN
for j:=1 to 100 do
begin
write(‘Введите ‘,j,’-е число: ‘);
readln(x[j]);
end;
writeln(‘Ввод исходных данных закончен!’);
skolkoUzhePodriadNulei:=0;
skolkoMaxPodriadNulei:=0;
for j:=1 to 100 do
if x[j]<>0
then begin
if skolkoMaxPodriadNulei < skolkoUzhePodriadNulei
then skolkoMaxPodriadNulei:= skolkoUzhePodriadNulei;
skolkoUzhePodriadNulei:=0
end
else Inc(skolkoUzhePodriadNulei);
writeln(‘Самая длинная последовательность - из ‘,
skolkoMaxPodriadNulei, ‘ нулей.’);
Readln
END.
№3.
- uses crt;
- var x,t,e,s:real;
- i:integer;
- begin
- clrscr;
- repeat
- write('Введите |x|<1 и x=');readln(x);
- until abs(x)<1;
- repeat
- write('Введите точность (0;1) e=');readln(e);{точность типа 0,0001}
- until (e>0)and(e<1);
- s:=x;
- t:=x;i:=1;{первое слагаемое}
- while abs(t)>e do
- begin
- i:=i+1;
- t:=t*x*x;
- s:=s+t/(2*i-1);
- end;
- s:=2*s;
- writeln('При е=',e:0:6,' сумма=',s:0:6);
- writeln('Аналитическое значение ln((1+x)/(1-x))=',ln((1+x)/(1-
x)):0:6); - readln
- end.