Структурированная запись алгоритма Sum 


Мы поможем в написании ваших работ!



ЗНАЕТЕ ЛИ ВЫ?

Структурированная запись алгоритма Sum



1. Получить от вызывающего алгоритма исходные данные: массив А и границы суммирования n 1 и n 2.

2. Обнулить S =0.

3.Повторять для i от n 1 до n 2.

3.1 S = S + А[ i ].

4. Передать результат S в вызывающий алгоритм.

Схема алгоритма

Текст прогаммы на языке Си

#include <stdio.h>

#define N 60

void inmas(double *a,int n)

{

 int i;

for (i=0;i<n;i++)

scanf("%lf",a++);

 return 0;

}

double sum(double *a,int n1,int n2)

{

 int i;double s=0;

for (i=n1;i<=n2;i++)

s+=*(a+i);

return s;

}

int main()

{

 int i,n,n2;

 double a[N],otn;

printf(" n= ");

scanf("%d",&n);

printf("\n");

n2=2*n;

printf("\nВведите 2*n элементов\n");

inmas(a,n2);

otn=sum(a,0,n-1)/sum(a,n,n2-1);

printf("Отношение суммы элементов\

 первой половины массива к сумме элементов\

 второй половины =%6.2f\n",otn);

 return 0;

}

Второй вариант

Так как язык Си позволяет передавать во вспомогательный алгоритм адрес любого элемента массива и работать с частью массива, начинающейся с указанного элемента, то при реализации программы на Си целесообразно по-другому организовать передачу исходных данных во вспомогательный алгоритм: при первом вызове алгоритма sum передавать в него адрес первого элемента первой половины массива а и размер половины массива n, а при втором вызове - адрес первого элемента второй половины массива & a [ n ] и n.

#include <stdio.h>

#define N 60

void inmas(double *a,int n)

{

 int i;

for (i=0;i<n;i++)

    scanf("%lf",a++);

 return 0;

}

double sum(double *a,int n)

{

 int i;double s=0;

for (i=0;i<n;i++)

s+=*(a+i);

return s;

}

int main()

{

 int i,n,n2;

 double a[N],otn;

printf(" n= ");

scanf("%d",&n);

printf("\n");

printf("Введите 2*n элементов\n");

inmas(a,2*n);

otn=sum(a,n)/sum(&a[n],n);

printf ("Отношение суммы элементов \

первой половины массива к сумме элементов \

второй половины =%6.2f\n",otn);

 return 0;

}

Текст программы на языке Паскаль

program z_49;

uses crt;

type mas=array of real;

procedure inmas(var a:mas;n:byte);

var i:byte;

begin

for i:=0 to n-1 do readln(a[i]);

end;

     

function sum (a:mas; n1,n2:byte):real;

var

i:byte; s:real;

begin

s:=0;

for i:=n1 to n2 do

    s:=s+a[i];

sum:=s;

end;

var

a:mas;

n, n2:byte;

otn:real;

begin

writeln (' n= ');

readln (n);

n2:=2*n;

SetLength (a, n2);

Writeln (' Введите 2*n элементов ');

inmas (a, n2);

otn:= sum (a,0,n-1) / sum (a,n, n2-1);

write (' Отношение суммы элементов первой ');

write (' половины массива к сумме элементов ');

writeln (' второй половины = ', otn:6:2);

a:=nil;

end.

Текст программы на языке Фортран

real function sum (a,n,n1,n2)

implicit none

integer, intent(in):: n,n1,n2

real, intent(in):: a(n)

real s

integer i

s=0

do i=n1,n2

s=s+a(i)

enddo

sum=s

end

 

Program z_49

Implicit none

real,allocatable:: a(:)

real sum,otn,s1,s2

integer i,n,n2

print *,' n= '

read *,n

n2=2*n

allocate (a(n2))

print *,' Введите 2*n элементов'

read *,a

otn = sum(a,n2,1,n)/ sum(a,n2,n+1,n2)

print *,' Отношение суммы элементов ', &

  ' первой половины массива к сумме ',&

   ' элементов второй половины = ', otn

deallocate (a)

end

Текст программы на языке Python

# В качестве массива используется стандартный тип

# list (список)

 

# Ввод массива из n элементов:

def Inmas(n):

A = [] # Создаем пустой список

for i in range(1,n+1):

print("Введите {0}-й элемент массива: ".

  format(i))

A.append(float(input()))

return A

 

# Возвращает значение суммы элементов массива B

# с порядковыми номерами от n1 до n2

# (индексы элементов списка от n1-1 до n2-1)

def Sum(B, n1, n2):

S = 0

for i in range(n1-1, n2):

S += B[i] # S = S + B[i]

return S

 

n = 0

while n < 1:

print("Введите натуральное n",

"(в массиве A будет 2*n элементов): ")

n=int(input())  

A=Inmas(2*n)

 

s1 = Sum(A,1,n)

s2 = Sum(A,n + 1, 2*n)

ot = s1/s2

print("Отношение суммы элементов первой")

print("половины массива к сумме элементов")

print("второй половины = {0:4.2}".format(ot))

Текст программы в системе Матлаб

n=input('Введите n= ');

disp('Введите 2*n элементов массива');

A=inmas(2*n);

otn =summ(A,1,n)/ summ(A,n+1,2*n);

disp('отношение суммы элементов первой')

disp('половины массива к сумме элементов') 

disp(sprintf('второй половины =%4.2f',otn))

  

function a=inmas(n)

for i=1:n

disp(sprintf('a(%g)=',i))

a(i)= input('');

end

 

function s=summ(a,n1,n2)

s=0;

for i=n1:n2

s=s+a(i);

end



Поделиться:


Последнее изменение этой страницы: 2021-04-12; просмотров: 99; Нарушение авторского права страницы; Мы поможем в написании вашей работы!

infopedia.su Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав. Обратная связь - 18.218.55.14 (0.011 с.)