Класс Описание
Основные понятия. Классы .NET для работы с файлами
Задача 5
Задача 1. Знайти найбільший елемент масиву ( MAX ) та його номер ( K ) .
Классификация систолических структур
Анализ различных типов систолических структур и тенденций их развития позволяет классифицировать эти структуры по нескольким признакам.
По степени гибкости систолические структуры могут быть сгруппированы на:
- специализированные;
- алгоритмически ориентированные;
- программируемые.
Специализированные структуры ориентированы на выполнение определенного алгоритма. Эта ориентация отражается не только в конкретной геометрии систолической структуры, статичности связей между ПЭ и числе ПЭ, но и в выборе типа операции, выполняемой всеми ПЭ. Примерами являются структуры, ориентированные на рекурсивную фильтрацию, быстрое преобразование Фурье для заданного количества точек, конкретные матричные преобразования.
Алгоритмически ориентированные структуры обладают возможностью программирования либо конфигурации связей в систолической матрице, либо самих ПЭ. Возможность программирования позволяет выполнять на таких структурах некоторое множество алгоритмов, сводимых к однотипным операциям над векторами, матрицами и другими числовыми множествами.
В программируемых систолических структурах имеется возможность программирования как самих ПЭ, так и конфигурации связей между ними. При этом ПЭ могут обладать локальной памятью программ, и хотя все они имеют одну и ту же организацию, в один и тот же момент времени допускается выполнение различных операций из некоторого набора. Команды или управляющие слова, хранящиеся в памяти программ таких ПЭ, могут изменять и направление передачи операндов.
По разрядности процессорных элементов систолические структуры делятся
- одноразрядные;
- многоразрядные.
В одноразрядных матрицах ПЭ в каждый момент времени выполняет операцию над одним двоичным разрядом; а в многоразрядных — над словами фиксированной длины.
По характеру локально-пространственных связей систолические структуры бывают:
- одномерные;
- двухмерные;
- трехмерные.
Выбор структуры зависит от вида обрабатываемой информации. Одномерные схемы применяются при обработке векторов, двухмерные - матриц, трехмерные - множеств иного типа.
Систолические структуры могут различаться по топологии связей между ПЭ
- линейные,
- квадратные,
- гексагональные,
- трехмерные и др.
Каждая конфигурация матрицы наиболее приспособлена для выполнения определенных функций, например линейная матрица оптимальна для реализации фильтров в реальном масштабе времени; гексагональная — для выполнения операций обращения матриц, а также действий над матрицами специального вида; трехмерная - для нахождения значений нелинейных дифференциальных уравнений в частных производных. Наиболее универсальными и наиболее распространенными, тем не менее, можно считать матрицы с линейной структурой.
Используемая литература
Цилькер, Б. Организация ЭВМ и систем / Б.Я. Цилькер, С.А. Орлов. СПб.: Питер - 2007, 672 c.
Перший елемент запам’ятаємо відразу як найбільший ( MAX:= a[1]; K:=1;).
Далі будемо послідовно порівнювати кожен елемент з MAX : якщо елемент менший за МАХ то запам’ятовувати його не треба(пропускаємо) , якщо ж якийсь елемент виявиться більшим за МАХ , тоді ми запам’ятаємо його значення і номер (MAX:=a[i]; K:= i ; ), при цьому попереднє значення МАХ і К стираються.Таким чином, на кожному етапі порівняння пам’ятатимемо більше з переглянутих чисел і наприкінці знайдемо найбільший елемент та його номер.
i A[i]
1 8
2 10
3 7
4 13
5 12
| | введіть елем. в рядок 8 10 7 13 12
найбільший елем 13
його номер 4
| | #include <stdio.h>
void main()
{
int A[5];
int MAX, K, i;
printf(“введіть елем. в рядок \n“) ;
for (i=0; i<5; i++) scanf(“%d”,& A[i] );
MAX=A[1]; K=1 ;
for (i=1; i<5; i++)
if (A[i]>MAX) {
MAX=a[i] ;
K= i ;
}
printf(“найбільший елем. %d”, MAX ) ;
printf(“\nйого номер %d “, K);
}
| Виконання програми
Екран :
Памєять:
I=2 a[2]>MAX так
I=3 a[3]>MAX нi
I=4 a[4]>MAX так
I=5 a[5]>MAX ні
|
В масиві переставити всі елементи на крок пліво, а перший елемент – на останнє місце.
Використаємо змінну Х для тимчасового зберігання значень елементів масиву.
#include <stdio.h>
void main()
{
int A[7];
int X, i;
printf(“введіть елем. в рядок \n“) ;
for (i=0; i<7; i++) scanf(“%d”,& A[i] );
for (i=0; i<6; i++)
{ X=A[i]; A[i]=A[i+1];
A[i+1]=X; }
printf(“\nновий масив \n”);
for (i=0; i<7; i++) printf(“%d “, A[i]);
}
| #include <stdio.h>
void main()
{
int A[7];
int X, i;
printf(“введіть елем. в рядок \n“) ;
for (i=0; i<7; i++) scanf(“%d”,& A[i] );
X=A[1];
for (i=0; i<6; i++) A[i]=A[i+1];
printf(“\nновий масив \n”);
for (i=0; i<7; i++) printf(“%d “, A[i]);
}
|
Контрольні питання :
1. Яке призначення масивів?
2. Як описується на мові С одновимірний масив?
3. Як оброблюється на мові С одновимірний масив?
4. Сформулюйте правила використання циклу з параметром.
Файл - именованная информация на внешнем носителе (на жестком или гибком магнитном диске). Логически файл можно представить как конечное количество последовательных байтов, поэтому такие устройства, как дисплей, клавиатура и принтер, также можно рассматривать как частные случаи файлов.
Передача данных с внешнего устройства в оперативную память называется чтением, или вводом, обратный процесс – записью, или выводом.
Чтение-запись в языке C# выполняется с помощью подсистемы ввода-вывода и классов библиотеки .NET. Рассмотрим обмен данными с файлами с помощью консоли, который реализуется с помощью потоков.
Поток (stream)– это любой перенос данных от источника к приемнику. Потоки обеспечивают работу как со стандартными, так и с определенными пользователем типами данных. Поток определяется как последовательность байтов и не зависит от конкретного устройства, с которым производиться обмен (оперативная память, файл на диске, клавиатура и принтер).
Обмен с потоком для повышения скорости передачи данных производиться, как правило, через специальную область оперативной памяти – буфер. Буфер выделяется для каждого открытого файла. При записи в файл вся информация сначала направляется в буфер и там накапливается до тех пор, пока весь буфер не заполниться. Только после этого и после специальной команды сброса происходит передача данных на внешнее устройство. При чтении из файла данные вначале считываются в буфер, причем не столько, сколько запрашивается, а сколько помещается в буфер. Механизм буферизации позволяет более быстро и эффективно обмениваться информацией с внешними устройствами.
Для поддержки потоков библиотека .NET содержит иерархию классов, основная часть которой представлена на рисунке 11.1 Эти классы определены в пространстве имен System.IO.
Рисунок 11.1 – Основные классы пространства имен System.IO
Классы библиотеки позволяют работать в различных режимах с файлами, каталогами и областями оперативной памяти. Краткое описание классов приведено в таблице 11.1.
Таблица 11.1 -Основные классы пространства имен System.IO
BinaryReader, Чтение и запись значений простых встроенных типов
BinaryWriter (целочисленных, логических, строковых)
во внутренней форме представления
BufferedStream Временное хранение потока байтов (например, для последующего
переноса в постоянное хранилище)
Directory, Работа с каталогами или физическими файлами: создание,
DirectoryInfo, File, удаление, получение свойств. Возможности классов File и
FileInfo Directory реализованы в основном в виде статических методов.
Аналогичные классы DirectoryInfo и FileInfo используют обычные методы
FileStream Произвольный (прямой) доступ к файлу, представленному как
поток байтов
MemoryStream Произвольный доступ к потоку байтов в оперативной памяти
StreamWriter, Чтение из файла и запись в файл текстовой информации
StreamReader ( произвольный доступ не поддерживается )
StringReader, Работа с текстовой информацией в оперативной памяти
SrringReader
_________________________________________________________________________________
Информация, обрабатываемая фалами в С# может быть в виде:
- двоичного представления данных(классы BinaryReader, BinaryWriter);
- байтов (FileStream);
- текста, то есть символов (StreamWriter, StreamReader).
Двоичные и байтовые потоки хранят данные в том же виде, в котором они представлены в оперативной памяти, то есть при обмене с файлом происходит побитовое копирование информации. Двоичные файлы применяются не для просмотра их человеком, а для использования в программах.
Соответственно, различают текстовые, двоичные и байтовые файлы.
Доступ к файлам может быть последовательным, когда очередной элемент можно прочитать (записать) только после аналогичной операции с предыдущим элементом, и произвольным (прямым), при котором выполняется чтение (запись) произвольного элемента по заданному адресу.
Текстовые файлы позволяют выполнять только последовательный доступ, в двоичных и байтовых потоках можно использовать оба метода.
Методы форматированного ввода (ЧТЕНИЯ) значений арифметических типов, в С# не поддерживаются. Для преобразования из символьного в числовое представление используются методы класса Convert или метод Parse.
Форматированный вывод (ЗАПИСЬ) выполняется с помощью метода ToString, результаты выполнения которых передаются в методы текстовых файлов.