Студопедия

КАТЕГОРИИ:

АстрономияБиологияГеографияДругие языкиДругоеИнформатикаИсторияКультураЛитератураЛогикаМатематикаМедицинаМеханикаОбразованиеОхрана трудаПедагогикаПолитикаПравоПсихологияРиторикаСоциологияСпортСтроительствоТехнологияФизикаФилософияФинансыХимияЧерчениеЭкологияЭкономикаЭлектроника


ФУНКЦИИ И МАССИВЫ




Цель работы : Получение практических навыков при работа со строками, одномерными и двумерными массивами. Получение практических навыков при работе с функциями. Получение практических навыков при передаче массивов и строк в функции.

Задание:

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.

Прототип функции Краткое описание Примечание
unsigned strlen(const char* s); Вычисляет длину строки s.  
int strcmp(const char* s1, const char* s2); Сравнивает строки s1 и s2. Если s1<s2, то результат отрицательный, если s1==s2, то результат равен 0, если s2>s1 – результат положительный.
int strcnmp(const char* s1, const char* s2); Сравнивает первые n символов строк s1 и s2. Если s1<s2, то результат отрицательный, если s1==s2, то результат равен 0, если s2>s1 – результат положительный.
char* strcpy(char* s1, const char* s2); Копирует символы строки s1 в строку s2.  
char* strncpy(char* s1, const char* s2, int n); Копирует n символов строки s1 в строку s2. Конец строки отбрасывается или дополняется пробелами.
char* strcat(char* s1, const char* s2); Приписывает строку s2 к строке s1  
char* strncat(char* s1, const char* s2); Приписывает первые n символов строки s2 к строке s1  
char* strdup(const char* s); Выделяет память и переносит в нее копию строки s При выделении памяти используются функции

 

Строки при передаче в функции могут передаваться как одномерные массивы типа char или как указатели типа char*. В отличие от обычных массивов в функции не указывается длина строки, т. к. в конце строки есть признак конца строки \0.

 

Задания по вариантам к лабораторной работе №7:

Вариант Одномерный массив Двумерный массив Строки
Отсортировать по возрастанию только четные элементы массива. Перевернуть все четные строки матрицы. Удалить все гласные буквы из строки.
Удалить из массива все четные элементы. Перевернуть все четные столбцы матрицы. Подсчитать количество слов в строке.
Найти количество простых чисел в массиве. Перевернуть все нечетные строки матрицы. Перевернуть каждое четное слово в строке.
Найти количество чисел Фибоначчи в массиве. Перевернуть все нечетные столбцы матрицы. Удалить каждое четное слово из строки.
Удалить все простые числа из массива. Отсортировать по убыванию все строки матрицы. Отсортировать слова в строке в лексикографическом порядке (по алфавиту).
Удалить из массива все числа Фибоначчи. Отсортировать по убыванию столбцы матрицы. Удалить из строки все слова, начинающиеся на гласную букву.
Отсортировать по возрастанию только положительные элементы массива. Меняя местами строки матрицы, отсортировать по возрастанию ее первый столбец. Удалить из строки все слова, заканчивающиеся на гласную букву.
Удалить из массива все элементы с четными номерами. Меняя местами столбцы матрицы, отсортировать по возрастанию ее первую строку. Удалить все гласные буквы из строки.
Отсортировать по возрастанию только те элементы массива, которые являются простыми числами. Все четные строки матрицы сдвинуть циклически на К элементов вправо. Подсчитать количество слов в строке.
Удалить из массива все элементы равные min(a[1],a[3],…a[2n-1]). Все нечетные строки матрицы сдвинуть циклически на К элементов влево. Перевернуть каждое четное слово в строке.
Создать новый массив из номеров элементов, значения которых равны 0.   Перевернуть все четные строки матрицы. Удалить каждое четное слово из строки.
Сформировать массив, в котором будут только элементы исходного массива, заканчивающиеся на цифру К. Перевернуть все четные столбцы матрицы. Отсортировать слова в строке в лексикографическом порядке (по алфавиту).
Отсортировать по возрастанию только четные элементы массива. Перевернуть все нечетные строки матрицы. Удалить из строки все слова, начинающиеся на гласную букву.
Удалить из массива все четные элементы. Перевернуть все нечетные столбцы матрицы. Удалить из строки все слова, заканчивающиеся на гласную букву.
Найти количество простых чисел в массиве. Отсортировать по убыванию все строки матрицы. Удалить все гласные буквы из строки.
Найти количество чисел Фибоначчи в массиве. Отсортировать по убыванию все столбцы матрицы. Подсчитать количество слов в строке.
Удалить все простые числа из массива. Меняя местами строки матрицы, отсортировать по возрастанию ее первый столбец. Перевернуть каждое четное слово в строке.
Удалить из массива все числа Фибоначчи. Меняя местами столбцы матрицы, отсортировать по возрастанию ее первую строку. Удалить каждое четное слово из строки.
Отсортировать по возрастанию только положительные элементы массива. Все четные строки матрицы сдвинуть циклически на К элементов вправо. Отсортировать слова в строке в лексикографическом порядке (по алфавиту).
Удалить из массива все элементы с четными номерами. Все нечетные строки матрицы сдвинуть циклически на К элементов влево. Удалить из строки все слова, начинающиеся на гласную букву.
Отсортировать по возрастанию только те элементы массива, которые являются простыми числами. Перевернуть все четные строки матрицы. Удалить из строки все слова, заканчивающиеся на гласную букву.
Удалить из массива все элементы равные min(a[1],a[3],…a[2n-1]). Перевернуть все четные столбцы матрицы. Удалить все гласные буквы из строки.
Создать новый массив из номеров элементов, значения которых равны 0.   Перевернуть все нечетные строки матрицы. Подсчитать количество слов в строке.
Сформировать массив, в котором будут только элементы исходного массива, заканчивающиеся на цифру К. Перевернуть все нечетные столбцы матрицы. Перевернуть каждое четное слово в строке.
Сформировать два массива. В первый массив включить элементы из исходного массива с четными номерами, а во второй с нечетными.   Отсортировать по убыванию все строки матрицы. Удалить каждое четное слово из строки.

 

Требования к отчёту по лабораторной работе:

1. оформить отчет по соответствующим требованиям (титульный лист)

2. сформулировать цель работы

3. задание;

4. схема алгоритм программы;

5. текст программы;

6. выводы по результатам выполнения лабораторной работы;

7. список используемой литературы (обязательно из электронной библиотеки).

 


Поделиться:

Дата добавления: 2015-02-09; просмотров: 367; Мы поможем в написании вашей работы!; Нарушение авторских прав





lektsii.com - Лекции.Ком - 2014-2024 год. (0.008 сек.) Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав
Главная страница Случайная страница Контакты