Организация перебора элементов массива в матрице.

1. Способ (перебор построчно)

a00 a01 a02 a03

a10 a11 a12 a13

a20 a21 a22 a23

inta [3] [4];

for (i=0;i<3;i++)

{ // начало i – строки

for (j=0;j<4;j++)

a [1] [j] = 0;

// конец i – строки

}

2. Способ (перебор матрицы по столбцам)

a00 a01 a02 a03

a10 a11 a12 a13

a20 a21 a22 a23

inta [3] [4];

for (j=0;j=4;j++)

{ // начало j – столбца

for (i=0;i<3;i++)

a [i] [j] = 0;

// конец j – столбца

}

Задача 1.

Дан массив. Память выделить статически. Ввести с клавиатуры и вывести на экран.

Вычислить произведение не нулевых элементов матрицы.

#include<iostream> //подключение системных средств для

using namespace std; //возможности использовать потоки ввода-вывода

int main(void) {

const int N=3;

const int M=4;

int A[N][M], proiz=1;

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

for (int j=0; j<M; j++) {

cout << "Enter" << i << j;

cin >> A[i][j];

}

}

for (i=0; i<N; i++) {

for (j=0; j<M; j++) {

cout << A[i][j];

if (A[i][j]!=0) {

proiz *= A[i][j];

}

}

cout << endl;

return 0;

}

Функции языка С++

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

Наличие функций избавляет нас от повторного программирования, программа, написанная с помощью функций, имеет более четкую структуру, а небольшую функцию легче понять, отладить, модифицировать.

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

Каждая из функций состоит из заголовка и тела функции. Каждая функций может находится в определенном файле, или все функции в одном файле, в любом порядке, но при этом каждая функция пишется от начала до конца.

Заголовок функции – это директивы препроцессора и имя функции. Если все функции помещены в одном файле, директивы препроцессора пишутся в самом начале файла один раз. Имя функции включает в себя тип функции, название функции и в круглых скобках параметры вместе с их типом, разделенные запятой.

Тип функции определяется типом результата функции, передаваемого через оператор return.Если функция не передает результат, тип функции void. Если тип функции не указан, то по умолчанию она типа int.

Параметры функции – это переменные, содержащие исходные данные, без которых нельзя вычислить результат.

Тело функции пишется аналогично телу main. После {скобки описывается внутренние переменные функций, необходимые для вычисление результата и для реализации алгоритма функции. Затем следуют операторы, реализующие алгоритм. Оператор return обычно завершает функцию. Хотя он может быть написан в любом месте функции в составе условного оператора.

Return; //при этом тип функции void.

Returnres;//при этом тип функции как у переменной res

returna*b;

return 1; //если результат выражен const.

Сама по себе функция не выполняется, необходимо, чтобы в теле другой функции, обычно main, появился оператор вызова этой функции. При написании оператора вызова функции пишутся аргументы функции в том же порядке, количества, что и параметры.

Аргументы функции – это конкретные значения исходных данных, передаваемых параметрам в процессе выполнения функции. Функции, кроме типа void, могут вызываться внутри выражения.

Прототип функции пишется до вызова функции обычно перед именем вызывающей функции, и содержит тип функции, название функции и в круглых скобках список типов параметров. Завершается ;

Если тип аргумента в операторе вызова функции не соответствует прототипу, он автоматически (если это возможно) приводятся к нужному типу и функция вызывается правильно; в противном случае возникает ошибка компиляции.

Итак, при написании функции необходимо:

· Объявить функцию или написать прототип.

· Определить функцию (написать имя и тело).

· В нужном месте программы организовать вызов функции.

ПРАВИЛА (основные принципы построения функции):

1.Каждая функция реализует одну подзадачу.

2.Исходные данные всегда передаются через параметры. Исключаются диалоги на ввод данных.

3.Результат всегда передается из функции с помощью оператора return или через параметры.

4.Функция не должна содержать констант, кроме общепринятых. Присутствие const объясняется нехваткой параметра.

Написать программу с функцией вычисляющей площадь произвольного треугольника по формуле Герона.

1. Название функции: Streug

2. Исходные данные:

а) сторона a => double a;

б) сторона b => double b;

в) сторона c => double c;

3. Тип результата функции: площадь => double

#include <math.h>

double Streug(double a,double b,double c)

{

double s, p;

p = (a+b+c)/2;

s = sqrt(p*(p-a)*(p-b)*(p-c));

return s;

}

Помещаем функцию в отдельный файл (streug.cpp).

Затем необходимо создать заголовочный файл streug.h. В этот файл помещаем:

#ifndef STREUG_H

#define STREUG_H

double Streug(double a,double b,double c);

#endif

Создаем файл main.cpp, содержащий решение всей программы:

#include<iostream> //подключение системных средств для

using namespace std; //возможности использовать потоки ввода-вывода

#include “streug.h”

int main (void)

{

double A,B,C,S; // имена аргументов не должны совпадать с именами параметров, хотя и могут

cout << «\nВведите стороны»;

cin >> A >> B >> C;

cout << «\n\nРезультат»;

S=Streug(A,B,C); // функцию можно вызвать и другим способом – S=Streug(5.0,3.5,7);

cout << “\Ns=” << S << endl;

return;

}

Классы памяти

Любая переменная или функция относится к какому-либо классу памяти. Класс памяти задается по умолчанию местом объявления переменной в программе или явно, с помощью ключевого слова, которое пишется в начале оператора объявления типа. Класс памяти определяет время жизни и область действия переменной.

Время жизни переменной – это то время выполнения программы, когда переменная сохраняет свое значение в оперативной памяти.

Область действия – это та часть программы, где переменная доступна по имени.

Существуют следующие классы памяти:

· extern –внешний класс.

· auto – автоматические переменные.

· register – регистровая переменная.

· static – статические переменные.

1. Внешние переменные.

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

2. Переменные автоматического класса.

Класс памяти задается по умолчанию. Если переменная объявлена в начале какого-либо блока, она принадлежит автоматическому классу. Область действия – блок, в котором она описана, время жизни – время выполнения блока. Память под переменную выделяется динамически при входе в блок и освобождается при выходе из блока. Переменная не обнуляется. Если наряду с автоматической переменной объявлена внешняя с тем же именем, то внешняя переменная маскируется на время выполнения блока и является недоступной.

3. Регистровые переменные.

Класс задается явно с помощью ключевого слова в операторе описания типа. Установка этого класса является, скорее всего, рекомендацией, которую машина может не выполнить. Память под переменной машина выделяет прямо в регистрах процессора, что ускоряет время доступа к переменной. Свойства такие же, как и у автоматического класса.

4. Статистические переменные.

Класс памяти задается явно с помощью ключевого слова, но в зависимости от места описания переменной, она может быть внешняя статическая или локальная статическая. Статические переменные обнуляются (все). Время жизни внешней переменной вся программа. Область действия файл, в котором описана переменная. У локальной статистической переменной время жизни вся программа, область действия – блок, где описана переменная.

Вывод: Имя переменной не уникальная характеристика. Переменная с одним и тем же именем, объявленная в разных частях программы - это различные переменные. Они могут «жить», но быть недоступными по имени.

Наши рекомендации