упражнение
№4
1.
Предаване
по стойност
Простите
променливи
по
подразбиране
се предават
по стойност
Целта на долния програмен фрагмент е да размени стойностите на променливите num и pnum, но той не върши нищо поради това, че предаването на параметрите между главната програма и функцията swap1 е по стойност. Убедете се в това, като изпълните програмния фрагмент. Помислете как да го коригирате, така че функцията наистина да размени стойностите на двете променливи.
#include <iostream.h>
void swap1(int pnum,int num);
void main()
{int num,pnum;
num=123;
pnum=1230;
cout<<"num
e"<<"\t"<<num <<"\n";
cout<<"pnum
e"<<"\t"<<pnum <<"\n";
swap1(pnum,num);
cout<<"num
e"<<"\t"<<num <<"\n";
cout<<"pnum
e"<<"\t"<<pnum <<"\n";
return;
}
void swap1(int pnum, int num)
{int temp;
temp= num;
num = pnum;
pnum=temp;
return ;}
Предаването
по стойност
се използва
за простите
променливи
винаги,
когато не желаем
подпрограмата
да променя
стойността
на
съответните
им
фактически
параметри.
Обратно, ако
искаме чрез
съответния
фактически
параметър да
бъде върната
стойност в
извикващата
функция, то
предаването
трябва да стане
по адрес.
Структурите
могат да се
предават по
стойност или
по адрес
аналогично
на простите
променливи.
Символните
низове са
реализирани
чрез масиви и
за това се
предават по
адрес така
,както
масивите
(чрез
указатели
или чрез индекси)
2.
Предаване
по адрес
Масивите,
независимо
дали са
статични или динамични,
дали се
обработват
чрез индекси
или чрез
указатели,
винаги се
предават по адрес.
При
многомерните
масиви
указатели се
използват
много трудно.
За това на
практика те
се
обработват
чрез индекси.
Програмният
фрагмент
по-долу
запазва
памет за масив
от 100 елемента,
но въвежда
толкова числа,
колкото
потребителят
заяви от
клавиатурата.
Въвеждането
става чрез
подпрограмата
input.
Вариант
с индекси за
едномерен
масив
#include <iostream.h>
float m1[100];
void input( float m[100],int n)
{
for (int i=0;i<n;i++)
{cout <<"a["<<i<<"] = ";
cin>>m[i];}
}
void main(void)
{int n;
do
{cout<<"n=";cin
>>n;}
while (n<0 or n>=100)
input(m1,n);
for (int i=0;i<n;i++)
{cout <<"a["<<i<<"] = "<<*(m1+i)<<"\n";}
}
#include <iostream.h>
const int max = 100;
void input( float m[max][max],int n)
{
for (int i=0;i<n;i++)
for (int j=0;j<n;j++)
{cout <<"a[“<<i<<”,”<<j<<”] = ";
cin>>m[i][j];}
}
void main(void)
{int n;
float m1[max][max];
cout<<"n=";cin >>n;
input(m1,n);
for (int i=0;i<n;i++)
for (int j=0;j<n;j++)
{cout <<"\na[“<<i<<”,”<<j<<”] = "<<m1[i][j];}
}
Предаване
на прости
променливи
по адрес:
има
два начина –
чрез
указатели и
чрез
псевдоними. Долният
програмен
фрагмент се
състои от главна
програма и
подпрограма,
която разменя
местата на
две променливи.
Вляво е
показан
вариант с
указатели, а
вдясно – чрез
псевдоними.
#include <iostream.h> void swap1(int &pnum,int &num); void main() {int
num,pnum; num=123; pnum=1230; cout<<"num
e"<<"\t"<<num <<"\n"; cout<<"pnum
e"<<"\t"<<pnum <<"\n"; swap1(pnum,num); cout<<"num
e"<<"\t"<<num <<"\n"; cout<<"pnum
e"<<"\t"<<pnum <<"\n"; return; } void swap1(int &pnum, int &num) {int temp; temp= num; num = pnum; pnum=temp; return ;}
#include
<iostream.h>
void swap1(int *pnum,int *num);
void main()
{int *num,*pnum;
num=new int;
*num=123;
pnum=new int;
*pnum=1230;
cout<<"num
e"<<"\t"<<*num <<"\n";
cout<<"pnum
e"<<"\t"<<*pnum <<"\n";
swap1(pnum,num);
cout<<"num
e"<<"\t"<<*num <<"\n";
cout<<"pnum
e"<<"\t"<<*pnum <<"\n";
return;
}
void swap1(int *pnum, int *num)
{int temp;
temp= *num;
*num = *pnum;
*pnum=temp;
return ;}
Задача 1 Да се
напише
програма, която няма
глобални
променливи,
въвежда от
клавиатурата
3 масива чрез
функция,
намира
най-големия и
най-малкия
еламент на
всеки от
масивите и
техните
индекси чрез
друга
функция и ги
връща в
главната
функция,
която ги
извежда.
Задача 2.
Да се
въведат от
клавиатурата
статични
масиви А, В, C и D
всеки с по n реални
числа (10<n<20). Въвеждането
да стане с
функция с два
параметъра,
единият от
които е
масива, а
другият –
броя на
обработваните
елементи. Да
се генерират
4 динамични
масива, всеки
от които е
сбор на два
от
въведените масиви
чрез функция
с три
параметъра-масиви
и един – брой
на
елементите в
масивите. Така
получените
масиви да се
изведат на екрана
чрез отделна
функция. Да се намери
най-големият
елемент във
всеки от
масивите и
неговият
индекс чрез
нова функция,
да се върнат
чрез
параметри в
главната
функция и от
там да се
изведат .