Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Касаткин С., Раткевич И., Травова Н. - Лаборато...doc
Скачиваний:
0
Добавлен:
22.11.2019
Размер:
1.01 Mб
Скачать
  1. Программа считывает линейный массив из файла, выводит его на экран, и подсчитывает количество элементов массива, находит min и max элементы и их ин­дексы.

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

#include<iostream>

#include<locale> //!!! Отвечает за работу с локализацией ОС

#include<iomanip>

#include<math.h>

#include<conio.h>

#include<String.h>

#include<ctype.h>

#include<stdlib.h>

#include<windows.h>

#include<fstream> // Этот файл обеспечивает работу с файлами

using namespace std;

/* если с файлом работают как главная программа, так и функции, лучше объявить его как глобальную переменную */

ifstream file("test.txt");

// Объявляем функцию, которая будет выдавать индексы:

void ShowIndex( int , float );

int main()

{

if(SetConsoleCP(1251)==0)

{

cerr<<"Fialed to set codepage!"<<endl;

}

if(SetConsoleOutputCP(1251)==0)

{

cerr<<"Failed to set OUTPUT page!"<<endl;

}

if(!file)

{

cerr<<"Файл test.txt не существует\n";

return 0;

}

float n, min, max; // число, считываемое из файла, минимум и максимум

int k=0; // количество чисел в файле

while (1) // как бы бесконечный цикл

{

file>>n;

if (file.eof()) break;

// если достигнут конец файла, выходим из цикла

if (!k) // если считано первое число (k=0)

{

min = n;

max = n;

}

else // если число – не первое

{

if (n<min) min=n;

// если встретилось число меньше, заменяем значение min

if (n>max) max=n;

// если встретилось число больше, заменяем значение max

}

cout<<n<<' '; k++;

/* выводим считанное число на экран и увеличиваем счетчик прочитанных чисел */

}

cout << endl; // завершаем вывод переводом курсора

cout<<"Количество чисел в файле: " << k << endl;

cout<<"Минимальный элемент: " << min<<endl;

cout<<"Номер(а) минимального элемента: ";

ShowIndex(k, min);

// вызываем функцию и передаем ей количество элементов и значение min

cout<<"Максимальный элемент: " << max <<endl;

cout<<"Номер(а) максимального элемента: " ;

ShowIndex(k, max);

// вызываем функцию и передаем ей количество элементов и значение max

_getch();

return 0;

}

/* Функция, которая считывает k чисел из файла, находит номера элементов, значение которых совпадает с m, и выводит на экран найденные индексы */

void ShowIndex( int k,float m)

{

file.clear();

file.seekg(0L,ios::beg); // переходим в начало файла

float n; // число, считываемое из файла

for (int i=0; i<k; i++) // отсчитываем k чисел

{

file>>n;

if (n == m) cout << i << ' ';

// если число равно m, выводим номер этого числа на экран

}

cout<<endl;

}

  1. Программа заполняет массив a[5][5] случайными целыми числами из диапазона [-3, 3] и находит произведение элементов, стоящих на побочной диагонали.

Номера элементов, стоящих на главной диагонали, совпадают; номера элементов, стоящих на побочной диагонали удовлетворяют условию: i + j = n+1, где n –размер матрицы.

#include<iostream>

#include<locale> //!!! Отвечает за работу с локализацией ОС

#include<iomanip>

#include<math.h>

#include<conio.h>

#include<String.h>

#include<ctype.h>

#include<stdlib.h>

#include<windows.h>

using namespace std;

int main()

{

if(SetConsoleCP(1251)==0)

{

cerr<<"Fialed to set codepage!"<<endl;

}

if(SetConsoleOutputCP(1251)==0)

{

cerr<<"Failed to set OUTPUT page!"<<endl;

}

//Динамически создаём 2- мерный массив

int n=5, **a= new int*[n];

cout<<"Исходный массив:\n";

int RANGE_MIN = -3; // Минимальный элемент

int RANGE_MAX = 7; // Максимальный элемент

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

for (int i = 0; i < 5; i++) // проходим по строкам матрицы

{

a[i]=new int [n];

// в каждой строке проходим по столбцам:

for (int j = 0; j < 5; j++) // счетчики должны быть разными!

{

a[i][j]=(int)(((double) rand() / (double) RAND_MAX) * RANGE_MAX + RANGE_MIN);

cout<< setw(5)<<a[i][j];

}

cout<<endl;

/* после вывода строки матрицы переводим курсор в начало следующей строки на экране */

}

cout <<endl;

// вычисляем произведение:

long p = 1;

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

p *= a[i][5-i-1]; // номер столбца вычисляем через номер строки

// обратите внимание на то, что для прохода по диагонали требуется один цикл

cout << "\nПроизведение элементов, стоящих на побочной диагонали = " << p << endl;

_getch();

return 0;

}

Тут вы можете оставить комментарий к выбранному абзацу или сообщить об ошибке.

Оставленные комментарии видны всем.