Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
hw3.doc
Скачиваний:
2
Добавлен:
03.08.2019
Размер:
137.73 Кб
Скачать

Домашние задание №3

(В помощь подготовке ко 2-ой контрольной)

1. Схема решения некоторых заданий.

Все следующие задания одинаковы:

Два фрагмента нижеприведенной программы, выделенные жирным курсивом, представляют собой решение одной и той же подзадачи для различных исходных данных – параметров этой подзадачи. Для подходящей подзадачи опишите процедуру (функцию) с параметрами и без глобальных переменных. Перепишите нижеприведенную программу в более компактной форме, используя операторы (этой) процедуры (вызовы функции) для реализации выделенных фрагментов.

Задание 1.1

int main()

{

int i,j,k,s;

const n = 10;

int a[n],b[n],c[n];

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

cin>>a[i];

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

cin>>b[i];

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

cin>>c[i];

s = 0;

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

s = s+a[i];

s = s+1;

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

s = s+b[j];

s = s+1;

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

s = s+c[k];

cout<<s;

return 0;

}

Решение:

Сначала обрабатываем первую строчку, в ней переменная i, причем она используется только в выделенном фрагменте(аналогично j,k) Значит это должна быть локальная переменная тогда обозначим ее за l1 и сразу же заменим ее во всем фрагменте

Вторая строка отличается массивом a(b и c), он зависит от предыдущей программы, поэтому мы передаем его в качестве аргумента a1. Важно, что это массив и в кавадратных скобках надо указывать константу, поэтому укажем само число 10 в качестве размерности массива.

l1 = i

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

s = s+a[l1];

l1 = i

a1=a

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

s = s+a1[l1];

l1 = j

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

s = s+b[l1];

l1 = j

a1=b

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

s = s+a1[l1];

l1 = k

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

s = s+c[l1];

l1 = k

a1=c

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

s = s+a1[l1];

____ sum (______________)

{

int l1;

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

}

____ sum (int a1[10],_______)

{

int l1;

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

s = s+a1[l1];

}

Все различия устранены, теперь можно все оставшиеся переменные передавать как переменные параметры(ставя впереди “&”), т.к. их значения передаются из вне, а изменения важны для последующей программы. Внимание перед n “&” не ставится, т.к. она константа. А возвращаемый тип указывать void.

Другой вариант. Учитывая специфику задачи. А точнее то, что результат хранится в s, то можно написать так, хотя это не подходит под универсальный способ, поэтому если сомневаетесь, то лучше так не делать!!!!!

l1 = i

a1=a

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

s = s+a[l1];

l1 = i

a1=a

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

s = s+a[l1];

l1 = j

a1=b

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

s = s+a[l1];

l1 = j

a1=b

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

s = s+a[l1];

l1 = k

a1=c

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

s = s+a[l1];

l1 = k

a1=c

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

s = s+a[l1];

void sum (int a1[10],int n, int&s)

{

int l1;

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

s = s+a1[l1];

}

int sum (int a1[10],int n, int s)

{

int l1;

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

s = s+a1[l1];

return s;

}

Тогда main() будет следующим:

Для первого случая

Или второго

int main(int argc, char* argv[])

{

int i,j,k,s;

const n = 10;

int a[n],b[n],c[n];

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

cin>>a[i];

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

cin>>b[i];

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

cin>>c[i];

s = 0;

sum(a,n,s);

s = s+1;

sum(b,n,s);

s = s+1;

sum(c,n,s);

cout<<s;

return 0;

}

int main(int argc, char* argv[])

{

int i,j,k,s;

const n = 10;

int a[n],b[n],c[n];

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

cin>>a[i];

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

cin>>b[i];

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

cin>>c[i];

s = 0;

s = sum(a,n,s);

s = s+1;

s = sum(b,n,s);

s = s+1;

s = sum(c,n,s);

cout<<s;

return 0;

}

Задание 1.2

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]