КАТЕГОРИИ:
АстрономияБиологияГеографияДругие языкиДругоеИнформатикаИсторияКультураЛитератураЛогикаМатематикаМедицинаМеханикаОбразованиеОхрана трудаПедагогикаПолитикаПравоПсихологияРиторикаСоциологияСпортСтроительствоТехнологияФизикаФилософияФинансыХимияЧерчениеЭкологияЭкономикаЭлектроника
|
ФУНКЦИИ И МАССИВЫЦель работы : Получение практических навыков при работа со строками, одномерными и двумерными массивами. Получение практических навыков при работе с функциями. Получение практических навыков при передаче массивов и строк в функции. Задание: 1. Используя функции сформировать с помощью ДСЧ одномерный массив и вывести его на печать. 2. Выполнить обработку одномерного массива в соответствии с вариантом, используя функции, результат вывести на печать. 3. Используя функции сформировать с помощью ДСЧ двумерный массив и вывести его на печать. 4. Выполнить обработку двумерного массива в соответствии с вариантом, используя функции, результат вывести на печать. 5. Ввести с клавиатуры строку символов и обработать ее в соответствии со своим вариантом, используя функции. Длительность:2 часа. Теоретические основы: Функция – это именованная последовательность описаний и операторов, выполняющая законченное действие, например, формирование массива, печать массива и т. д. Основным способом обмена информацией между вызываемой и вызывающей функциями является механизм параметров. Существует два способа передачи параметров в функцию: по адресу и по значению. При передаче по значению выполняются следующие действия: вычисляются значения выражений, стоящие на месте фактических параметров; в стеке выделяется память под формальные параметры функции; каждому фактическому параметру присваивается значение формального параметра, при этом проверяются соответствия типов и при необходимости выполняются их преобразования.
void Change(int a,int b)//передача по значению { int r=a; a=b; b=r; } int main() { int x=1,y=5; Change(x,y); cout<<”x=”<<x<<” y=”<<y; //выведется: x=1 y=5
return 1; }
При передаче по адресу в стек заносятся копии адресов параметров, следовательно, у функции появляется доступ к ячейке памяти, в которой находится фактический параметр и она может его изменить.
void Change(int *a,int *b)//передача по адресу{ int r=*a; *a=*b; *b=r; } int main() { int x=1,y=5; Change(&x,&y); cout<<”x=”<<x<<” y=”<<y; //выведется: x=5 y=1 return 1; }
Для передачи по адресу также могут использоваться ссылки. Ссылка – это синоним имени объекта, указанного при инициализации ссылки. Формат объявления ссылки тип & имя =имя_объекта; Ссылка не занимает дополнительного пространства в памяти, она является просто другим именем объекта. При передаче по ссылке в функцию передается адрес указанного при вызове параметра, а внутри функции все обращения к параметру неявно разыменовываются.
void Change(int &a,int &b) { int r=a; a=b; b=r; } int main() { int x=1,y=5; Change(x,y); cout<<”x=”<<x<<” y=”<<y; //выведется: x=5 y=1 return 1; }
Передача одномерных массивов как параметров функции При использовании массива как параметра функции, в функцию передается указатель на его первый элемент, т. е. массив всегда передается по адресу. При этом теряется информация о количестве элементов в массиве, поэтому размерность массива следует передавать как отдельный параметр.
void print(int a[100],int n) //вывод массива на печать { for(int i=0;i<n;i++) cout<<a[i]<<" "; cout<<"\n"; }
Так как в функцию передается указатель на начало массива (передача по адресу), то массив может быть изменен за счет операторов тела функции. 2.4. Передача строк в качестве параметров функций Строка в Си++ - это массив символов, заканчивающийся нуль-символом – ‘\0’ (нуль-терминатором). По положению нуль-терминатора определяется фактическая длина строки. Количество элементов в таком массиве на 1 больше, чем изображение строки. Для работы со строками существуют специальные библиотечные функции, которые содержатся в заголовочном файле string.h. Строки при передаче в функции могут передаваться как одномерные массивы типа char или как указатели типа char*. В отличие от обычных массивов в функции не указывается длина строки, т. к. в конце строки есть признак конца строки /0.
//Функция поиска заданного символа в строке int find(char *s,char c) { for (int I=0;I<strlen(s);I++) if(s[I]==c) return I; return –1 }
Передача многомерных массивов в функцию Многомерный массив – это массив, элементами которого служат массивы. Например, массив int a[4][5] – это массив из указателей int*, которые содержат имена одноименных массивов из 5 целых элементов:
Рис. Выделение памяти под массив, элементами которого являются массивы.
При передаче многомерных массивов в функцию все размерности должны передаваться в качестве параметров.
const int N=4;//глобальная переменная void transp(int a[][N],int n)// транспонирование матрицы { int r; for(int I=0;I<n;I++) for(int j=0;j<n;j++) if(I<j) { r[a[I][j]; a[I][j]=a[j][I]; a[j][I]=r; } }
Строки Строка в C++ – это массив символов, заканчивающийся нуль-символом – ’\0’ (нуль-терминатором). По положению нуль-терминатора определяется фактическая длина строки. Количество элементов в таком массиве на 1 больше, чем изображение строки. Присвоить значение строке с помощью оператора присваивания нельзя. Поместить строку в массив можно либо при вводе, либо с помощью инициализации. char s1[10]="string1";//инициализация char s2[]="string2";//инициализация char s3[10]; cin>>s3;//ввод //выделение памяти под динамическую строку char *s4=new char[strlen(s3)+1]; strcpy(s4,s3);//копирование строки s3 в строку s4 Для работы со строками существуют специальные библиотечные функции, которые содержатся в заголовочном файле string.h.
Строки при передаче в функции могут передаваться как одномерные массивы типа char или как указатели типа char*. В отличие от обычных массивов в функции не указывается длина строки, т. к. в конце строки есть признак конца строки \0.
Задания по вариантам к лабораторной работе №7:
Требования к отчёту по лабораторной работе: 1. оформить отчет по соответствующим требованиям (титульный лист) 2. сформулировать цель работы 3. задание; 4. схема алгоритм программы; 5. текст программы; 6. выводы по результатам выполнения лабораторной работы; 7. список используемой литературы (обязательно из электронной библиотеки).
|