Символы кириллицы выводит некорректно. Как сделать чтобы выводился читабельный текст на русском языке? Тип приложения - не Qt, Qt Creator 4.5.0 основан на Qt 5.10.0. Win7.
|
Структуры в языке C++
9.1 Общие сведения о структурах
Из предыдущих глав известно, что массив это переменная для хранения множества данных одного типа. Если возникает необходимость обрабатывать разнородную информацию как единое целое, то применяют тип данных структуры. Он позволяет сгруппировать объекты различных типов данных под одним именем.
Для того, чтобы объявить переменные структурного типа, вначале нужно задать новый тип данных, указав имя структуры и её элементы. Элементы структуры называются полями, и могут иметь любой тип данных кроме типа этой же структуры. Далее приведён пример создания структурного типа student, полями которого являются фамилия студента, шифр группы, год начала обучения и оценки по четырём предметам:
struct student { //Поля структуры: char fio [ 30 ]; char group [ 8 ]; int year; int informatika, math, fizika, history; }
На основании созданного структурного типа данных можно описать переменные типа student:
student Vasya; //Переменная Vasya типа student. student ES [ 50 ]; //Массив, элементы которого имеют тип student. student *x; //Указатель на тип данных student
Обращаются к полям переменной структурного типа так:
имя_структуры.поле
Например,
Vasya.year; //Обращение к полю year переменной Vasya. ES[4].math; //Обращение к полю math элемента ES[4].
Задача 9.1. Задано комплексных чисел, которые хранятся в двоичном файле. Найти значение наибольшего модуля среди заданных чисел.
Напомним, что комплексные числа это числа вида , где и — действительные числа, а — мнимая единица, . Комплексное число расширяет понятие действительного числа. Если действительное число — это любая точка на числовой прямой, то под комплексным числом понимают точку на плоскости (рис. 9.1). Модуль комплексного числа вычисляют по формуле .
Для решения задачи 9.1 разработаны две программы. Первая создаёт файл исходных данных, вторая получает из него информацию и обрабатывает её в соответствии с поставленной задачей.
Далее приведён текст программы создания двоичного файла с комплексными числами. В файл complex.dat будет записано число n, а затем последовательно комплексные числа.
#include <iostream> #include <fstream> using namespace std; int main ( ) { //Структура Комплексное число. struct complex { //Поля структуры: double Re; //Действительная часть. double Im; //Мнимая часть. }; complex p; //Переменная для хранения комплексного чисела. int i, n; FILE *f; cout<<" n = "; cin>>n; f=fopen ( " complex.dat ", " wb " ); fwrite (&n, sizeof ( int ), 1, f ); for ( i =0; i<n; i++) { cout<<"Введите комплексное число\n "; //Ввод комплексного числа: cin>>p.Re; //действительная часть, cin>>p.Im; //мнимая часть. //Вывод комплексного числа. cout<<p.Re<<" + "<<p.Im<<" i "<<endl; //Запись комплексного числа в двоичный файл. fwrite (&p, sizeof ( complex ), 1, f ); } fclose ( f ); return 0; }
Следующая программа считывает информацию из файла complex.dat — количество комплексных чисел в переменную n, а сами комплексные числа в массив p. Затем происходит поиск комплексного числа с максимальным модулем в массиве p.
#include <iostream> #include <math.h> using namespace std; int main ( ) { struct complex { double Re; double Im; }; complex *p; int i, n, nmax; double max; FILE *f; f=fopen ( " complex.dat ", " rb " ); fread (&n, sizeof ( int ), 1, f ); p=new complex [ n ]; fread ( p, sizeof ( complex ), n, f ); //Поиск комплексного числа с максимальным модулем max=sqrt ( p[0].Re*p[0].Re+p[0].Im*p[0].Im ); for ( i =1,nmax=0; i<n; i++) if ( sqrt ( p[i].Re*p[i].Re+p[i].Im*p[i].Im )>max) { max=sqrt ( p[i].Re*p[i].Re+p [i].Im*p[i].Im ); nmax= i; } cout<<" max = "<<max<<" \t nmax = "<<nmax<<endl; fclose ( f ); return 0; }