Задания для самостоятельного выполнения. 1. Открыть файл, имя которого задается с клавиатуры

1. Открыть файл, имя которого задается с клавиатуры. Посчитать и вывести на эк­ран количество байт в этом файле. Первую половину прочитанного файла записать в другой файл. Вывести полученный файл на экран.

2. Открыть файл, имя которого задается с клавиатуры. Записать в другой файл первые n байт этого файла, где n задается с клавиатуры (проверьте, что n находится в допустимых пределах). Вывести полученный файл на экран.

3. Открыть файл, имя которого задается с клавиатуры. Посчитать и вывести на эк­ран количество слов в этом файле. Первую половину слов записать в другой файл. Вывести полученный файл на экран.

4. Открыть файл, имя которого задается с клавиатуры. Записать в другой файл первые n слов этого файла, где n задается с клавиатуры (проверьте, что n находится в допустимых пределах). Вывести полученный файл на экран.

5. Открыть файл, имя которого задается с клавиатуры. Посчитать и вывести на эк­ран количество строк в этом файле. Первую половину строк записать в другой файл. Вывести полученный файл на экран.

6. Открыть файл, имя которого задается с клавиатуры. Записать в другой файл первые n строк этого файла, где n задается с клавиатуры (проверьте, что n находится в допустимых пределах). Вывести полученный файл на экран.

7. Открыть файл, имя которого задается с клавиатуры. Создать новый файл, в который записать в обратном порядке строки исходного файла (инвертировать файл построчно).

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

9. Открыть файл, имя которого задается с клавиатуры. Переписать в другой файл только те строки, которые содержат заданную последовательность символов.

10. Открыть файл, имя которого задается с клавиатуры. Переписать в другой файл только те строки, которые содержат заданное слово.

11. Открыть файл, имя которого задается с клавиатуры. Переписать в новый файл только те слова, которые состоят из цифр.

12. Открыть файл, имя которого задается с клавиатуры. Найти сумму чисел, содержащихся в файле.

13. Открыть файл, имя которого задается с клавиатуры. Найти в этом файле максимальную по длине строку и переписать строки в новый файл, выровняв длину каждой строки по максимальной (добавив в конец каждой строки пробелы).

14. Открыть файл, имя которого задается с клавиатуры. Переписать в новый файл только те строки, которые являются комментариями типа //…

15. Открыть файл, имя которого задается с клавиатуры. Переписать в новый файл только комментарии типа /*…*/

16. Открыть файл, имя которого задается с клавиатуры. Создать новый файл, удалив заданную последовательность символов из файла.

17. Открыть файл, имя которого задается с клавиатуры. Создать новый файл, заменив одну заданную последовательность символов на другую.

18. Открыть файл, имя которого задается с клавиатуры. Создать новый файл, который содержит набор слов, содержащихся в исходном файле (каждое слово должно входить в результирующий файл только 1 раз).

19. Открыть файл, имя которого задается с клавиатуры. Переписать в новый файл только те слова, которые записаны латинскими буквами.

20. Открыть файл, имя которого задается с клавиатуры. Создать новый файл, удалив лишние пробелы между словами, но не изменяя деление на строки.

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

22. Открыть файл, имя которого задается с клавиатуры. Создать новый файл, в который переписать только те слова, которые записаны большими буквами (русскими и латинскими).

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

24. Написать программу, которая считывает из файла данные о продаваемых ком­пьютерах, описываемые следующей структурой:
название, тип процессора, тактовая частота, объем памяти, объем жесткого диска, производитель, цена.
Вывести на экран сведения о компьютерах с самой высокой тактовой частотой.

25. Написать программу, которая считывает из файла данные о жителях города, опи­сываемые структурой: Фамилия имя отчество, дата рождения, улица, дом, квартира.
Вывести на экран сведения о жителях дома, номер которого вводится с кла­ви­а­туры (улицы могут быть разными).

26. Написать программу, которая считывает данные об автомобилях, описываемых следующей структурой: марка, год выпуска, страна-производитель, цена, фамилия имя отчество владельца.
Вывести на экран сведения об автомобилях иностранного производства.

27. Написать программу, которая считывает из файла данные о студентах, описываемые следующей структурой: Фамилия имя отчество, номер группы, количество экзаменов в текущем семестре, количество несданных экзаменов.
Вывести на экран список задолжников.

28. Написать программу, которая считывает данные о продаваемых товарах, описываемые следующей структурой: Название, цена, страна производитель, количество поступившего товара, количество проданного товара.
Вывести на экран сведения о товарах, которых осталось меньше половины от количества поступления.

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

30. Написать программу, которая считывает данные из файла о фильмах, име­ю­щих­ся в прокате, описываемые структурой: Название, жанр, страна-производитель, год выпуска, Фамилия и имя актера, снявшегося в глав­ной роли.
Вывести сведения о фильмах, в которых играет актер, фамилия и имя которо­го вводится с клавиатуры.

Лабораторная работа № 6

Тема: “Программы, использующие массивы ”.

1. Программа заполняет массив A(50) случайными целыми числами из диапазона [-20, 30] и упорядочивает его по возрастанию. Исходный и упорядоченный массивы выводятся на экран дисплея.

Программа иллюстрирует работу с массивом фиксированного размера, заполненным случайными числами.

#include<iostream>

#include<iomanip>

#include<math.h>

#include<conio.h>

#include<String.h>

#include<ctype.h>

#include<stdlib.h>

#include<windows.h>

using namespace std; // Используем стандартное пространство имён

/* Функция, выполняющая перестановку значений двух переменных (обратите внимание на то, что аргументы должны быть объявлены как ссылки): */

void swap(int& a, int& b)

{

int c;

c=a; a=b; b=c;

}

// Подпрограмма сортировки методом «пузырька»

void sort(int* a, int n)

{

for ( int i = 1; i < n; i++ ) // отсчитываем проходы по массиву

for ( int j = 0; j < n-i; j++ ) // проходим по массиву

{

if ( a[j] > a[j+1] ) // сравниваем два соседних элемента

swap(a[j], a[j+1]); // переставляем их

}

}

int main()

{

if(SetConsoleCP(1251)==0)

{

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

}

if(SetConsoleOutputCP(1251)==0)

{

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

}

int n=50;

int *a=new int[n]; // объявляем массив из 50 элементов

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

// заполняем массив случайными числами и выводим на экран

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

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

//Пример взят из справки ms-help: //MS.VSCC.v80/MS.MSDN.v80/MS.VisualStudio.v80.en/dv_vccrt/html/75d9df25-7aaf-4a88-b940-2775559634e8.htm

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

{

a[i] = (int)(((double) rand() / (double) RAND_MAX) * RANGE_MAX + RANGE_MIN); // случайные числа из диапазона [-20, 30]

cout << setw(4) << a[i]; /* выводим на экран элемент массива (ширина поля вывода – 4 */

}

cout <<endl;

// Вызываем функцию сортировки и передаем ей указатель на массив и размер массива:

sort( a, n);

printf("\nМассив, отсортированный по возрастанию:\r\n");

// для вывода массива на экран требуется цикл:

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

{

printf("%4d", a[i]); // выводим элемент массива на экран

}

printf("\r\n"); // перевод курсора в начало следующей строки

_getch();

return 0;

}

2. Программа, которая по заданным корням многочлена степени n восста­нав­ливает все коэффициенты многочлена.

Программа иллюстрирует работу с массивами изменяющегося размера.

Для вычисления коэффициентов можно воспользоваться соотношением:

Задания для самостоятельного выполнения. 1. Открыть файл, имя которого задается с клавиатуры - student2.ru

В результате при вводе первого корня мы должны получить коэффициенты 1 и
– x, например: при x1 = 2 мы получаем многочлен Задания для самостоятельного выполнения. 1. Открыть файл, имя которого задается с клавиатуры - student2.ru (два коэффициента).

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

a0 a1 a2 … an-1

+ -a0xn -a1xn … -an-2xn – an-1xn

Например: при вводе двух корней 2 и –3 получаем:

(x-2)(x+3) = x2-2x+3x-6 =1x2 + 1x –6

1 -2

+ -1(-3) –(-2)(-3)

---------------------------

1 1 -6

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

#include<iostream>

#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;

}

do

{

int n; // количество корней

do

{

cout << "Задайте количество корней > 0 --> ";

cin >> n;

} while (n < 1);

double* x = new double [n]; //корни

double* a = new double [n+1]; //коэффициенты многочлена

a[0] = 1; // первый коэффициент равен единице

cout << "Задайте корни:\n";

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

{

cout<< i+1 <<"-й корень --> ";

cin >> x[i];

a[i+1] = -a[i] * x[i];

//Добавили последний коэффициент в массив

// вычисляем остальные коэффициенты:

for (int j = i; j >= 1; j--)

a[j] += -a[j-1] * x[i];

}

// вывод:

cout << "Заданы корни: ";

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

cout << x[i]<<" ";

cout << endl;

cout << "Коэффициенты многочлена: ";

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

cout << a[i]<<" ";

cout << endl;

delete []x;

delete []a;

cout<<"Для выхода нажмите Esc\n";

}while(_getch()!=27);

return 0;

}

3. Программа считывает линейный массив из файла, выводит его на экран, и подсчитывает количество элементов массива, находит 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;

}

4. Программа заполняет массив 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;

}

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