Задания на Структуры,Организацию работы с файлами,Графику

  • Автор темы valis
  • Дата начала
Статус
Закрыто для дальнейших ответов.
V

valis

#1
Денис,и снова я. Срастил все задачи которые остались до конца семестра :ya_lamo:
Если будет время,посмотри пожалуйста. В принципе все это до следующего вторника
Лаб 4 Структуры
Задача 7. Ввести структуру для описания комплексного числа. Составить и протестировать функции дня:
а) преобразования комплексного числа из алгебраической формы в показательную;
б) преобразования комплексного числа из показательной формы в алгебраическую;
в) получение сопряженного комплексного числа;
г) возведение комплексного числа в целую положительную степень;
д) умножение комплексных чисел в алгебраической форме;
е) умножение комплексных чисел в показательной форме;
ж) деление комплексных чисел в показательной форме;
з) деление комплексных чисел в алгебраической форме.

Задача 29
1 описать структуру с именем NOTE, содержащую следующие поля:
а. Фамилия и имя
б. Номер телефона
в. день рождение (массив из трёх чисел)
2 написать программу, выполняющую следующие действия:
а. Ввод с клавиатуры данных в массив, состоящий из восьми элементов типа NOTE. записи должны быть упорядочены по алфавиту
б. Вывод на дисплей информации о людях, чьи дни рождения приходятся на месяц, значение которого введено с клавиатуры.
в. если таких нет, вывести соответствующие сообщение.


Лаб 5 Организация работы с файлами

Задача 10. Каждая строка файла содержит следующие данные; пол, имя, рост. Распечатать средний женский рост и имя самого высокого мужчины по данным файла. Использовать структуру для описания понятия человек.

Лаб 6 Графика.

Задача 23. На экране изображен прямоугольник. Необходимо предоставить возможность управления его размерами и положением:
клавиша ”>” увеличивает ширину на 5 точек;
клавиша ”<” уменьшает ширину на 5 точек;
клавиша ”+” увеличивает высоту на 5 точек;
клавиша ”-” уменьшает высоту на 5 точек;
клавиши управления курсором перемещают прямоугольник по экрану.
 

vital

Больной Компом Детектед
29.01.2006
2 432
33
#2
:ya_lamo: Это типа решите мне столько за просто так?
 

DarkKnight

Well-known member
01.08.2010
653
0
#3
2vital: Это по блату ;-)))

2 valis: Вася в ближайщие несколько дней посмотрю... Как будет время..... Пока дома вообще за компом сидет не выходит....
 

DarkKnight

Well-known member
01.08.2010
653
0
#4
Лаб 6 Графика.

Задача 23. На экране изображен прямоугольник. Необходимо предоставить возможность управления его размерами и положением:
клавиша ”>” увеличивает ширину на 5 точек;
клавиша ”<” уменьшает ширину на 5 точек;
клавиша ”+” увеличивает высоту на 5 точек;
клавиша ”-” уменьшает высоту на 5 точек;
клавиши управления курсором перемещают прямоугольник по экрану.
Т.к. я уже очень давно далек от консольной графики и от всяких так чудесных боланд-дос функция типа InitGraph и еже с ними, да и Windows7 у меня стоит, а она врят ли адекватно поймет столь беспордонное обращение с видео-памятью, поэтому подход будет в стиле "abibas©" :))), т.к. полноценное оконное приложение нам использовать нельзя...
А именно.... Обычная программа консоли, создает саму консоль (а это есть окно ;-) ), и никто нам не запретит получить HWND этого окна ;-)))
И нам не важно какие функции вывода в станд. потоки идут в консоли, мы будем рисовать по ним ;-))) Как на обычном окне... ;-)

C++:
/*
Задача 23. На экране изображен прямоугольник. Необходимо предоставить возможность управления его размерами и положением:
клавиша ”>” увеличивает ширину на 5 точек;
клавиша ”<” уменьшает ширину на 5 точек;
клавиша ”+” увеличивает высоту на 5 точек;
клавиша ”-” уменьшает высоту на 5 точек;
клавиши управления курсором перемещают прямоугольник по экрану.
*/
#include <Windows.h>
#include <iostream>
#include <conio.h>

using namespace std;

//Как бы класс MyRect (Прямоугольник)
class MyRect
{
public: //Что бы не описывать функции доступа, сделаю все члены-публичными,
int x; //Координата х - левая верхняя точка (аналог left)
int y; //Координата y - левая верхняя точка (аналог top)
int W; //Длина прямоугольника
int H; //Ширина прямоугольника
MyRect() //Введем конструктор по-умолчания, только из-за него класс и создавал, можно было бы обойтись и структурой
{
//Инициализируем все величины
x = 0; 
y = 0;
W = 100;
H = 100;
}
};

//Основная функция, точка входа
void main(void)
{
setlocale(LC_ALL,".1251");
HWND Console = GetConsoleWindow(); //Получим дескриптор консольного окна 
HDC hDC = GetDC(Console); //Получим доступ к DC;
if (!hDC) //Если что то пошло не так выйдем
{
cout << "Не возможно получить графический контент" << endl;
return;
}	

int Key; //Код нажатой клавиши
RECT Rect; //Область будем сюда клиентскую область окна писать по-ссылки
MyRect A; // Наш объект (нашего как-бы класса)
SetWindowPos(Console,NULL,0,0,800,600,0); //Изменим позицию окна и размер 

//Создадим кисти
HBRUSH BrushWhite = CreateSolidBrush(RGB(255,255,255)); //Пойдет на заливку экрана
HBRUSH BrushBlue = CreateSolidBrush(RGB(0,0,255)); //А этим будем прямоугольник закрашивать

//Используем получение символа стандатного ввода (получение нажатия клавиши), getch- без эхо вывода, так что нашу графику не будет ничего затирать
while (Key = getch()) // Получим клавишу в как-бы бесконечном цикле (выход из него будет клавиша ESC(27), она будет описана наже
{
switch (Key) //Оператором выбора будем делать все что указанно в задании
{
case 45: A.W -=5; //Это если нажата "-"
break;
case 61: A.W += 5; //Если нажата "+"
break;
case 161: A.H -=5; //Если нажата "<"
break;
case 238: A.H += 5; //Если нажата ">"
break;
case 77: A.x++; //Стрелка вправо
break;
case 75: A.x--; //Стрелка влево
break;
case 72: A.y--; //Стрелка вниз
break;
case 80: A.y++; //Стрелка вверх
break;
case 27: //Нажата клавиша ESC 
return; //Сразу покинем программу
}

GetClientRect(Console,&Rect); //Получим клиентскую область окна - что бы то что нужно закрасить
SelectObject(hDC,BrushWhite); //Выберим кисть (белую)
Rectangle(hDC,Rect.left,Rect.top,Rect.right,Rect.bottom); //Закрасим всю клиент. облость окна
SelectObject(hDC,BrushBlue); //Выберим кисть синию
Rectangle (hDC,A.x, A.y, A.x+A.W, A.y+A.H); //Обрисуем треугольник
}
}
Добавлено: Как я уже сказал Вася, времени за компом сидеть особо нет... Так что код такой, посредственный, можно было описать подробно классы, кучу класс. членов-функций описать, но во-первых долго, во-вторых запутанно бы было... А так все понятно.... Если будет время, то может и остальные сегодня напишу...
 

Вложения

V

valis

#5
Опять таки огромейнейшее спасибо. Денис,мне абсолютно не принципиально какой код,моя цель впарить ей лабы, чтобы получить допуск к экзамену,а для этого достаточно работоспособной программы,. Хочется тебя как-то отблагодарить,только вот даже не знаю как :rolleyes:
 

DarkKnight

Well-known member
01.08.2010
653
0
#6
Лаб 5 Организация работы с файлами

Задача 10. Каждая строка файла содержит следующие данные; пол, имя, рост. Распечатать средний женский рост и имя самого высокого мужчины по данным файла. Использовать структуру для описания понятия человек.
C++:
Для того что бы сгенерировать входной файл я использовал такой программный код
#include <iostream>
#include <fstream>

using namespace std;
//Структура человек
struct Men
{
bool Sex; //false - Женщина, true - мужчина
char Name[32]; //Имя 31-символ макс + '0' - завершение строки
int Rost; //Рост в см.
};

void main(void)
{
setlocale(LC_ALL,".1251");
ofstream fileout("database.txt");
int Size;
cout << "Введите кол-во записей в файле : ";
cin>>Size;
Men *Arr = new Men[Size]; //Динамически выделим память под массив записей
for (int i = 0; i< Size; i++)
{
cout << "Введите пол : (0-женщина, 1 - мужчина : ";
cin >> Arr[i].Sex;
cout << "Введите Имя : ";
cin.sync();
cin.getline(Arr[i].Name,31);
cout << "Введите Рост : ";
cin >> Arr[i].Rost;
cout << endl << endl;

}

for (int i = 0; i<Size; i++)
{
cout << Arr[i].Sex << "\t" << Arr[i].Name << "\t" << Arr[i].Rost << endl;
//Исходя из того что в задание фигурирует слово (КОНЕЦ строки в файле), то видно файл текстовый, поэтому разделим все параметры пробелом
fileout << Arr[i].Sex << " " << Arr[i].Name << " " << Arr[i].Rost << endl;
}
fileout.close();
//Почистим за собой
delete[] Arr;

}
Хотя впринципи, при каких-нибудь операций с файлами (с структурированными данными) используется все же двоичный ввод/вывод... Но задание требует поэтому будем придерживатся его....
Теперь к самой программе...
C++:
/*
Задача 10. Каждая строка файла содержит следующие данные; пол, имя, рост. 
Распечатать средний женский рост и имя самого высокого мужчины по данным файла.
Использовать структуру для описания понятия человек.
*/

#include <iostream>
#include <fstream>

using namespace std;
//Структура человек
struct Men
{
bool Sex; //false - Женщина, true - мужчина
char Name[32]; //Имя 31-символ макс + '0' - завершение строки
int Rost; //Рост в см.
};

void main(void)
{
setlocale(LC_ALL,".1251"); //Установим локаль в 1251- код. страницу
ifstream filein("database.txt"); //Наш входной файл
Men Arr[500]; //Предположим, что наш файл(входной) содержите не более 500 записей, хотя конечно можно было сделать все по факту, но это бы усложноло код
int Size = 0; //Это кол-во реальных данных в файле
//Условия задачи
double SrFemaleRost = 0.0;
int CountFamale = 0;
int IndexMaxMen = -1; //Индекс самого высокого мужчины
int RostMax = 0; //Рост самого высокого мужчины

while (!filein.eof()) //Пока не достигнут конец файла то
{
//В этом месте не плохо было бы использовать строковый поток sstream(считать из него строку, все разложить по-полочками и т.д), но обойдем и выводом из файла
filein >> Arr[Size].Sex >> Arr[Size].Name >> Arr[Size].Rost;
char buffer[1024];
filein.getline(buffer,1024); // это то что пришлось отбросить до конца строки
//Сразу будем прорабатывать условие задачи
if (!Arr[Size].Sex) //Если женщина
{
CountFamale++; //Увеличим кол-во женщин
SrFemaleRost += Arr[Size].Rost; //Увеличим рост для нахождения стреднего значения
}
else // А это с мужчинами
{
if (RostMax < Arr[Size].Rost)
{
RostMax = Arr[Size].Rost;
IndexMaxMen = Size;
}
}

Size++; //Увеличим счетчик
}


for (int i = 0; i<Size-1; i++)
{
cout << Arr[i].Sex << "\t" << Arr[i].Name << "\t" << Arr[i].Rost << endl;
}
filein.close(); //Закроем дескриптор файла

//Выведим статистику по заданинию
cout << "Средний рост женщины : " << (double)(SrFemaleRost/CountFamale) << endl;
cout << "Имя самогов высокого мужчины : " << Arr[IndexMaxMen].Name << endl;
}
 

Вложения

Статус
Закрыто для дальнейших ответов.