- •19. Сравнение Автоматической и динамической переменных.
- •20. Сравните работу с автоматическим массивом и с динамическимю
- •21.Принцип работы malloc и free. Как можно проверить смогли ли выделить память.
- •23. Способы передачи двухмерного массива в функцию. С примерами.
- •24. Архитектура Фон Неймана. Основные элементы эвм, принципы.
- •25. Архитектура Фон-неймана. Основные элементы эвм. Косвенная адресация операндов. Понятие операнда.
- •26. Архитектура Фон Неймана. Узкое горло арх. Фон Неймана. Способы решения.
23. Способы передачи двухмерного массива в функцию. С примерами.
Массив - это набор однотипных данных, доступ к которым может быть осуществлен по индексу, т.е. по номеру элементаФункция-это поименованная часть программы, которая может вызываться из других частей программы столько раз, сколько необходимо. Функция, в отличие от процедуры, обязательно возвращает значение. . Двумерный массив - это так называемая матрица (или таблица), у которой есть строки и столбцы( это обычная таблица, со строками и столбцами).
1способ: Для правильного вычисления адреса нахождения элемента массива в памяти необходимо точно знать размер строки, то есть размер двухмерного массива.
#include "stdafx.h"
void f(int m[5][5]) {
int c=0;
for (int i=0;i<5;i++){
for (int j=0;j<5;j++){
printf ("adr=%d i=%d j=%d value=%d\n",&m[i][j],i,j,m[i][j]);
}
}
}
int _tmain(int argc, _TCHAR* argv[])
{
int M[5][5];
int c=0;
for (int i=0;i<5;i++){
for (int j=0;j<5;j++){
M[i][j]=++c;
}
}
f(M);
scanf(" ");
return 0;
}
2способ: Двумерный массив представляется в виде одномерного, а местоположения каждого элемента двумерного массива в одномерном определяется суммой номера столбца и произведения номера строки на длину строки. Способ индексации одинаков как в вызывающей функции, так и в вызываемых.
#include <stdio.h>
#include <stdlib.h>
#include <malloc.h>
#define MAXVAL 1000
void *Malloc ( size_t size );
void RandomMatr ( double *Matr, int n, int l );
void OutMatr ( char *name, double *Matr, int n, int m );
void main( void )
{
size_t n = 5, m = 6;
double *A;/* Выделение памяти под матрицу */
A = (double *) Malloc( n*m*sizeof(double) );/* Заполнение матрицы значениями и распечатка */
RandomMatr(A, n, m);
OutMatr("A", A, n, m);/* освобождение памяти */
free(A);
}
void RandomMatr (double *Matr, int n, int m)
{
int i, j;
for(i = 0; i < n; i++)
for(j = 0; j < m; j++)
Matr[i*m+j] = random(MAXVAL) + 1;
}
void OutMatr( char *name, double *Matr, int n, int m )
{
int i, j;
printf("\nМатрица %s\n---------------\n", name);
for(i = 0; i < n; i++)
{
for(j = 0; j < m; j++)
printf("%8.1lf ", Matr[i*m+j]);
printf("\n");
}
}
void * Malloc( size_t size )
{
void *p = malloc(size);
if( !p )
{ printf("Недостаточно памяти!\n"); exit(1); }
return p;
}
24. Архитектура Фон Неймана. Основные элементы эвм, принципы.
Архитектура – это наиболее общие принципы построения ЭВМ, реализующие программное управление работой и взаимодействием основных ее функциональных узлов.
Архитектура Фон Неймана - система принципов построения и функционирования компьютера, предложенная американским математиком Джоном Фон Нейманом в 1945 году в статье «Предварительное рассмотрение логической конструкции электронно-вычислительного устройства». Фон Неймановская архитектура компьютера считается классической, на ней построено большинство компьютеров. В общем случае, когда говорят об архитектуре фон Неймана, подразумевают физическое отделение процессорного модуля от устройств хранения программ и данных.
Основные элементы ЭВМ:
В соответствии с принципами фон Неймана компьютер состоит из:
Арифметического логического устройства — АЛУ (англ. ALU, Arithmetic and Logic Unit), выполняющего арифметические и логические операции;
Устройства управления, предназначенного для организации выполнения программ;
Запоминающих устройств (ЗУ), в т.ч. оперативного запоминающего устройства (ОЗУ) и внешнего запоминающего устройства (ВЗУ);
Внешних устройств для ввода-вывода данных.
Принципы Фон Неймана:
Принцип двоичного кодирования
Согласно этому принципу, вся информация, поступающая в ЭВМ, кодируется с помощью двоичных сигналов (двоичных цифр, битов) и разделяется на единицы, называемые словами.
Принцип однородности памяти
Программы и данные хранятся в одной и той же памяти. Поэтому ЭВМ не различает, что хранится в данной ячейке памяти — число, текст или команда. Над командами можно выполнять такие же действия, как и над данными.
Принцип адресуемости памяти
Структурно основная память состоит из пронумерованных ячеек; процессору в произвольный момент времени доступна любая ячейка. Отсюда следует возможность давать имена областям памяти, так, чтобы к хранящимся в них значениям можно было бы впоследствии обращаться или менять их в процессе выполнения программы с использованием присвоенных имен.
Принцип последовательного программного управления
Предполагает, что программа состоит из набора команд, которые выполняются процессором автоматически друг за другом в определенной последовательности.
Принцип жесткости архитектуры
Неизменяемость в процессе работы топологии, архитектуры, списка команд.
Компьютеры, построенные на этих принципах, относят к типу фон-неймановских.