Программирование

Автор: Пользователь скрыл имя, 13 Апреля 2012 в 21:54, лабораторная работа

Описание работы

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/5)+...+(x^2n+1)/(2n+1)+...) при (|x|<1). Считается, что требуемая точность достигнута, если очередное слагаемое по модулю меньше abs.

Ответы:

№1 

  1. var 
  2. n,i:integer;
  3. begin  
  4. write('N=');  
  5. readln(n);  
  6. for i:=1 to n do 
  7.   if n mod i=0 then 
  8.     writeln('Naiden delitel:',i);
  9. end.

№2 (Дано натуральное число N (N>9). Определить количество нулей, идущих подряд в младших разрядах данного числа. Пример. N=1020 000. Количество нулей равно четырем.)

  1. uses crt;
  2. var n:longint; 
  3.   k:byte;
  4. begin
  5. clrscr;
  6. repeat
  7. write('Введите натуральное число n>9 n=');
  8. readln(n);
  9. until n>9;
  10. k:=0;
  11. while(n>0)and(n mod 10=0) do 
  12. begin 
  13. k:=k+1; 
  14. n:=n div 10; 
  15. end;
  16. write('Количество нолей в младших разрядах=',k);
  17. readln
  18. 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(intut,output);

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.

  1. uses crt;
  2. var x,t,e,s:real; 
  3.   i:integer;
  4. begin
  5. clrscr;
  6. repeat
  7. write('Введите |x|<1 и x=');readln(x);
  8. until abs(x)<1;
  9. repeat
  10. write('Введите точность (0;1) e=');readln(e);{точность типа 0,0001}
  11. until (e>0)and(e<1);
  12. s:=x;
  13. t:=x;i:=1;{первое слагаемое}
  14. while abs(t)>e do 
  15. begin 
  16. i:=i+1; 
  17. t:=t*x*x; 
  18. s:=s+t/(2*i-1); 
  19. end;
  20. s:=2*s;
  21. writeln('При е=',e:0:6,' сумма=',s:0:6);
  22. writeln('Аналитическое значение ln((1+x)/(1-x))=',ln((1+x)/(1-x)):0:6);
  23. readln
  24. end.

Информация о работе Программирование