ТОП 10:

Объявить два целочисленных массива с разными размерами и написать функцию, которая заполняет их элементы значениями и показывает на экран.



#include <iostream> using namespace std; void fillAndShowArray(int arrayForFilling[], int size); int main() { const int SIZE1 = 8; const int SIZE2 = 14; int arrayForFilling1 [SIZE1] = {}; int arrayForFilling2 [SIZE2] = {}; fillAndShowArray(arrayForFilling1, SIZE1); fillAndShowArray(arrayForFilling2, SIZE2); return 0; }   void fillAndShowArray(int arrayForFilling[], int size) { for (int i = 0; i < size; i++) { arrayForFilling[i] = i + 1; printf(“ %d”,arrayForFilling[i]); } }

В этой задаче удобно то, что если необходимо изменить значение размера массива, достаточно изменить соответствующую константу (SIZE1 или SIZE2). Так нам не придется менять эти значения ни в объявлении массивов, ни в параметрах при вызове функции.

Задания – все задачи делать с функциями:

1. Пример процедуры. Вывод элементов массива.

2. Создайте процедуру, печатающую слово Hello заданное число раз. Количество раз передавайте в процедуру как параметр-значение.

3. Функция, которая находит сумму цифр трехзначного числа

4. Создайте процедуру, меняющую значения двух переменных местами.

5. Процедура вывода целого числа

6. Сумма массива, минимальный элемент – функции.

7. Функция выдает случайное число в диапазоне от 1 до 7.

8. Расчет скидки в зависимости от суммы продажи.

9. Вывести на экран все отрицательные числа от N до K через пробел

 

Создание библиотеки.

Мы рассмотрели два типа функций, причём объявление функций выполняли в области программы, после подключения заголовочных файлов, но до начала функции main().

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

Требуется создать два файла типа *.cpp и *.h.

Файл *.h нужен для того, чтобы скрыть реализацию функций, т. е. в файле *.h будут содержаться прототипы функций. С помощью обозревателя решений MVS создаём файл типа *.h и называем его.

// код файла summa.h #ifndef summa #define summa int summa(int A, int B); // прототип функции нахождения палиндрома пятизначных чисел #endif

Директивы в строках 2,3,5 необходимо всегда объявлять в файлах с прототипами функций, причём прототипы функций всегда объявляются в файлах типа *.h. После директив записанных в строках 2,3, но до директивы #endif объявляются прототипы функций. В строке 4 объявлен прототип функции summa() Объявление данной функции находится в файле summa.cpp, который предварительно тоже был создан с помощью обозревателя решений MVS.

// содержимое файла palendrom.cpp #include "stdafx.h" #include "summa.h" int summa(int A, int B) { return (A+B); // }

В файле summa.cpp находится объявление функции summa(). Так как файл summa.cppявляется исполняемым файлом (*.cpp — исполняемые файлы), то в нём обязательно нужно подключить контейнер "stdafx.h", как в строке 2. Чтобы связать файл, где объявлена функция summa() и файл с её прототипом, подключим заголовочный файл (файл с прототипом), это сделано в строке 3. Обратите внимание на то, что при подключении созданного нами файла используются двойные кавычки, а не знаки больше, меньше. Осталось только запустить функцию summa()в главном исполняемом файле.

#include "stdafx.h" #include <iostream> // подключение заголовочного файла, с прототипом функции summa () #include " summa.h" using namespace std;   int main(int argc, char* argv[]) { Summa(2,4); return 0; }

В строке 6 мы подключили файл с прототипом функции summa(), после чего можно использовать эту функцию. Итак, мы разбили программу на три файла:

  • файл проекта
  • заголовочный файл summa.h
  • исполняемый файл summa.cpp

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

 

Про функцию main()

Все создавая программы видели шаблон консольного приложения, где создавалось примерно следующее:

int main(int argc, char* argv[]) { /* ... */ }

 

Как мы видим у функции main() также есть формальные параметры. Они нужны для запуска программы из командной строки. Первый параметр содержит количество параметров командной строки, второй это массив строк, содержащий параметры командной строки. Т.е. первый параметр показывает количество элементов массива во втором параметре. Первый элемент массива строк (argv[0]) всегда содержит строку, использованную для запуска программы (либо пустую строку). Следующие элементы (от 1 до argc - 1) содержат параметры командной строки, если они есть. Элемент массива строк argv[argc] всегда должен содержать 0.

 

Указатели

 

При объявлении переменных, в оперативной памяти компьютера выделяется память под них. Переменная типа int занимает 4 байта памяти, соответственно массив из 100 элементов типа int будет занимать 4*100 байтов памяти. Для работы с большими проектами это создает проблемы. Программы зависают. Поэтому, зачастую используется указатели.

Указатель — это переменная, хранящая в себе адрес ячейки оперативной памяти, например 0x100.

Мы можем объявить переменную статическую, как делали это ранее и тогда память под нее выделится при начале работы программы и освободится после окончания работы программы. А можем, используя указатели, занимать и освобождать память по мере надобности.

Указатель не несет информации о содержимом объекта, а содержит сведения о том, где размещен объект. Указатель — это тоже переменная, которая размещается в памяти. Она тоже имеет адрес, а ее значение является адресом некоторой другой переменной. Переменная, объявленная как указатель, занимает 4 байта в оперативной памяти (в случае 32-битной версии компилятора). Указатель, как и любая переменная, должен быть объявлен. Общая форма объявления указателя:

тип *имя_объекта;

Тип указателя— это тип переменной, адрес которой он содержит.

ля работы с указателями в Си определены две операции:

· операция * (звездочка) — позволяет получить значение объекта по его адресу - определяет значение переменной, которое содержится по адресу, содержащемуся в указателе;

· операция & (амперсанд) — позволяет определить адрес переменной.

Например,

сhar c; // переменная

char *p; // указатель

p = &c; // p = адрес c

 

Пример, демонстрирующий работу указателя:

#include "stdio.h"

#include <iostream>

#include <string.h>

 

using namespace System;

 

int main()

{

//простой пример указателей

int a = 4;

int *pr;

pr=&a;

printf(" pr = %p\n",pr);

printf("adress a = %p\n",&a);

printf("a = %d\n",a);

printf("znach pr = %d\n",*pr);

system("pause");

 

В результате:

 

Как же использовать переменные при динамическом выделении памяти:

Выделение памяти осуществляется с помощью оператора new и имеет вид:

тип_данных *имя_указателя = new тип_данных;

например int *a = new int;.

После удачного выполнения такой операции, в оперативной памяти компьютера происходит выделение диапазона ячеек, необходимого для хранения переменной типа int.

Инициализация значения, находящегося по адресу указателя выполняется схожим образом, только в конце ставятся круглые скобки с нужным значением:

тип данных *имя_указателя = new тип_данных(значение).

Для того, чтобы освободить память, выделенную оператором new, используется оператор delete.

Пример:

#include "stdafx.h"

#include "stdio.h"

#include <iostream>

 

using namespace System;

 

int main()

{

int *a = new int; // Объявление указателя для переменной типа int

int *b = new int(5); // Инициализация указателя

 

*a = 10;

*b = *a + *b;

printf("b = %d\n",*b);

 

delete b;

delete a;

printf("b = %d\n",b);

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

Пример:

#include "stdafx.h"

#include "stdio.h"

#include <iostream>

int main()

{

int num; // размер массива

printf("Enter integer value: ");

scanf("%d",&num); // получение от пользователя размера массива

 

int *p_darr = new int[num]; // Выделение памяти для массива

for (int i = 0; i < num; i++) {

// Заполнение массива и вывод значений его элементов

p_darr[i] = i;

printf("Value of %d element is %d \n" , i, p_darr[i]);

}

delete [] p_darr; // очистка памяти

 

//

 

system("pause");

 

return 0;

}

Структуры

Структура — это объединение нескольких объектов, возможно, различного типа под одним именем, которое является типом структуры. В качестве объектов могут выступать переменные, массивы, указатели и другие структуры.

Структуры позволяют трактовать группу связанных между собой объектов не как множество отдельных элементов, а как единое целое. Структура представляет собой сложный тип данных, составленный из простых типов.

Общая форма объявления структуры:

struct тип_структуры
{

тип ИмяЭлемента1;

тип ИмяЭлемента2;

. . .

тип ИмяЭлементаn;

};

После закрывающей фигурной скобки } в объявлении структуры обязательно ставится точка с запятой.

Пример объявления структуры

struct date
{

int day; // 4 байта

char *month; // 4 байта

int year; // 4 байта

};

При объявлении структур, их разрешается вкладывать одну в другую.

Пример

struct persone
{

char lastname[20]; // фамилия

char firstname[20]; // имя

struct date bd; // дата рождения

};







Последнее изменение этой страницы: 2017-02-10; Нарушение авторского права страницы

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