Задания для самостоятельного выполнения. 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 и
– x, например: при x1 = 2 мы получаем многочлен (два коэффициента).
При вводе второго и последующих корней коэффициенты вычисляются следующим образом:
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;
}