Студопедия.Орг Главная | Случайная страница | Контакты | Мы поможем в написании вашей работы!  
 

Методические указания. В условиях задач выражение вида "x [A,B] с шагом h" означает, что переменная x изменяется дискретно с шагом h в интервале [A,B]



В условиях задач выражение вида " x [ A,B ] с шагом h " означает, что переменная x изменяется дискретно с шагом h в интервале [ A, B ], начиная от его левой границы;

max{α, β, …, γ} - функция, принимающая значение максимальной из перечисленных в скобках переменных.

Следует помнить, что элементы любого массива, в том числе и многомерного, обычно располагаются в оперативном запоминающем устройстве ЭВМ в одном непрерывном блоке ячеек памяти, размер которого вычисляется в ходе выполнения программы из конкретных значений размерностей заданного массива.

Таким образом, любой массив в памяти всегда хранится в виде одномерной последовательности значений, и обеспечение произвольного доступа к его элементам является обязанностью программиста. По соглашению, принятому для Си-программ, элементы многомерных массивов заносятся в память последовательно, начиная с элемента, имеющего нулевые индексы в порядке увеличения на единицу сначала младшего (первого справа) индекса от нуля до его максимального значения при нулевых значениях других индексов, затем элементы, второй индекс справа которых равен единице, а более старшие - нулевые и т.д. Для матрицы это соответствует построчной записи ее элементов в память ЭВМ. Произвольный доступ к элементу трехмерного массива a [ i ][ j ][ k ], i =0... I -1, j =0... J -1, k =0... K -1 возможен с использованием "приведенного индекса" - величины, равной смещению ячейки памяти, в которой хранится значение данного элемента a [ i ][ j ][ k ] относительно начала массива. Для a [ i ][ j ][ k ] приведенный индекс равен: i × J × K + j × K + k. Приведенная ниже программа иллюстрирует ввод целочисленных значений матрицы размера line × col в динамически запрашиваемую область памяти и вывод на монитор ее значений строчками по col элементов в каждой, а также отдельного элемента matr [ l ][ c ] с использованием приведенного индекса:

#include<stdio.h> /*******************************************/

#include<conio.h> /* Данная программа разработана с учетом */

#include<alloc.h> /* особенностей ОС MS-DOS и MS Windows. */

#include<process.h> /*******************************************/

int main(void)

{

int *matr, *matr_ptr, line, col, l=1, c=2;

printf("Введите кол-во <строк> <столбцов> матрицы:");

scanf("%d %d",&line,&col);

int size=line*col;

char *diagn_mes="Ошибка распределения памяти.\n";

if((matr=(int *)malloc(size*sizeof(int)))==NULL)

{

printf("%s", diagn_mes); getch(); abort();

}

matr_ptr=matr;

for(int i=0;i<size;i++)

{

printf("Введите элемент matr[%d][%d]: ",i/col, i%col);

scanf("%d",matr_ptr++);

}

printf("Исходная матрица:");

for(i=0, matr_ptr=matr; i<size; i++)

{

if(!(i%col)) printf("\n");

printf(" %5d",*matr_ptr++);

}

printf("\nЭлемент matr[l=%d][c=%d]:%d", l, c, matr[l*col+c]);

return 0;

}

Для того, чтобы эта программа считала данные из файла, а не с консоли, при ее запуске нужно перенаправить поток ввода на файл исходных данных (source.dat), используя оператор переназначения стандартного устройства ввода DOS `<` (пример запуска: D:\>progr.exe < source.dat). При этом файл исходных данных должен состоять из разделенных пробельными символами целых чисел, первое из которых - количество строк исходной матрицы, второе - количество столбцов, и далее - построчно элементы матрицы, начиная с нулевого элемента нулевой строки. Например, для (2×3) матрицы

файл исходных данных должен состоять из последовательности чисел:

2 3

4 5 6 7 8 9.

Вопросы для собеседования

1. Что такое указатель и какие операции над указателями определены? Каким образом производится объявление, инициализация указателя? Правила адресной арифметики.

2. Каким образом определяется тип переменной - указателя? По каким правилам выполняются арифметические операции с переменными-указателями?

3. Что такое индексное выражение, приведенный индекс, для чего они нужны и как используются?

4. Какие операции с распределением памяти ЭВМ и как можно выполнить в процессе исполнения программы (динамически)?

5. Что такое функция в Си-программе? Что такое прототип и определение функции?

6. Что такое формальные и фактические аргументы функции?

7. Какие фактические параметры при вызове функции могут соответствовать формальному аргументу, являющемуся: а) идентификатором статического массива; б) указателем на функцию; в) идентификатором переменной одного из базовых типов?

8. Можно ли разные формальные аргументы функции обозначать одинаковыми идентификаторами? А фактические?

9. Перечислите все возможные способы передачи информации из программы в вызываемую функцию и обратно.





Дата публикования: 2014-11-18; Прочитано: 491 | Нарушение авторского права страницы | Мы поможем в написании вашей работы!



studopedia.org - Студопедия.Орг - 2014-2024 год. Студопедия не является автором материалов, которые размещены. Но предоставляет возможность бесплатного использования (0.007 с)...