Использование массивов в качестве аргументов функции. 


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



ЗНАЕТЕ ЛИ ВЫ?

Использование массивов в качестве аргументов функции.



Поскольку имя массива означает адрес его 0-го элемента, то массив всегда передается по ссылке. Оформим в виде функции вычисление суммы элементов массива, описанное в разделе 4.1.4.

float summ(int n, float *mas);

{ int i;

float s=0;

for (i=1;i<n;i++) // Для каждого элемента

s+=mas[i];   // Увеличение суммы на mas[i]

return s;

}

Сравним теперь средние арифметические двух массивов, введенных с клавиатуры, используя функцию summ. Здесь vvod_ mas1() - функ­ция для ввода одномерного массива, которую нужно написать самостоятельно.

#define MAX_SIZE 100

void main(void)

{

float a[MAX_SIZE],b[MAX_SIZE]; // описание массивов

float sa, sb;             // их средние значения

int na, nb; // количества введенных элементов этих массивов

 

vvod_mas1(&na,a) // Ввод количества элементов na и массива a

vvod_mas1(&nb,b) // Ввод количества элементов nb и массива b

sa=summ(na,a)/na; // среднее арифметическое массива a

sb=summ(nb,b)/nb; // среднее арифметическое массива b

·········      // обработка sa и sb

}

Если в функцию надо передать двумерный массив, то в качестве соответствующего формального параметра надо использовать указатель на одномерный массив с размером, равным длине строки передаваемого массива, например, int (*mas)[4]. Вместо такого указателя можно использовать и просто двумерный массив, указав только количество его столбцов - int mas[ ][4].

Такое описание необходимо транслятору, чтобы знать, в каком месте одномерной памяти начинается новая строка двумерного массива, и уметь находить элемент с заданными индексами:

2 байта                      
                       

Строка 1

Строка 2

Строка 3

Пример 24. Напишем, как будет выглядеть заголовок описания функции vvod_mas2() ввода с клавиатуры двумерного массива, количество столбцов для которого было отведено в памяти в соответствии с именованной константой K_STOLB. Функция должна также заполнять значения количеств строк и столбцов вводимого массива по адресам, находящимся в указателях n_str и n_stlb, вводя их с клавиатуры:

void vvod_mas2(int *n_str, int *n_stlb, int mas[][K_STOLB])

или (см. Пример 23)

void vvod_mas2(int &n_str, int &n_stlb, int (*mas)[K_STOLB])

Пример 25. Оформим в виде функции password() ввод с клавиатуры пароля и сравнение его с образцом (см. Пример 19). В функцию передается образец пароля, а возвращается истина, если введенный пароль верен.

int password(char *parol)

{ int i

unsigned char mas[81];

 

gets(mas);         // Ввели пароль

for (i=0; mas[i] == *(parol+i);i++);

if (mas[i] == '\0') // Строки совпали полностью

return 1;      

return 0;

}

Обращение к функции может выглядеть так:

if password("Мой пароль")

cout << "Пароль верный, доступ открыт";

Пример 26. Оформим функцию wrd_let(), определяющую количество букв и слов в передаваемой ей строке (см. Пример 20). Поскольку определяются значения двух параметров, то в функцию передаются адреса переменных, а не их значения.

void wrd_let(int *k_sl, int *k_sim, char *mas)

{ int i=0;            // Номер текущего символа

unsigned char ch;   // Текущий символ

 

*k_sl=1,*k_sim=0;   // Количество слов и символов

gets(mas);

while ((ch = *mas++)!= '\0')

if (ch==' ')         // Текущий символ - пробел -

*k_sl++;           // увеличили кол-во слов

else if (ch>64 && ch<240) // Текущий символ - буква -

*k_sim++;          // увеличили кол-во букв

}

После такого обращения к функции:

wrd_let(&slova, &bukvy, "Мы изучаем Си!");

переменные slova и bukvy примут значения соответственно 3 и 11.

Работа с внешними файлами в Си.

Файловый указатель. Открытие файла.

Язык Си позволяет считывать данные из файла и записывать результаты работы в файл для последующего использования. Прототипы всех функций для работы с файлами, описанные ниже, находятся в в файле stdio.h.

Для работы с файлом надо описать указатель на файл. Описание имеет вид:

FILE *имя_переменной

Здесь FILE - имя специальной структуры для работы с файлами. Она описана в файле stdio.h. Например:

FILE *fin, *fout;

Чтобы файл был доступен для чтения или записи, его нужно открыть. Файловый указатель связывается с конкретным файлом в момент его открытия функцией fopen():

указатель = fopen(строка с именем файла, режим открытия)

Режим открытия указывает, с какой целью открыт файл:

Режим Цель открытия (режим)
"r" чтение из файла
"w" создание нового файла и запись туда
"a" добавление в файл
"r+" чтение и запись
"w+" создание нового файла для чтения и записи

Например,

fin = fopen("test_in.txt","r");

fout = fopen("test_out.txt","w");

Первый файл test_in.txt открыт для чтения из него информации. Второй - test_out.txt - будет создан заново, даже если он уже существует, и открыт для записи.

При любой ошибке открытия fopen() возвращает значение NULL, описанное в stdio.h.



Поделиться:


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

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