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

Тема в разделе "C/C++/C#", создана пользователем valis, 21 дек 2010.

Статус темы:
Закрыта.
  1. valis

    valis Гость

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

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


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

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

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

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

    vital Больной Компом Детектед
    Команда форума Web Team

    Регистрация:
    29 янв 2006
    Сообщения:
    2.474
    Симпатии:
    27
    :ya_lamo: Это типа решите мне столько за просто так?
     
  3. DarkKnight

    DarkKnight Well-Known Member
    C\C++ Team

    Регистрация:
    1 авг 2010
    Сообщения:
    653
    Симпатии:
    0
    2vital: Это по блату ;-)))

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

    DarkKnight Well-Known Member
    C\C++ Team

    Регистрация:
    1 авг 2010
    Сообщения:
    653
    Симпатии:
    0
    Т.к. я уже очень давно далек от консольной графики и от всяких так чудесных боланд-дос функция типа InitGraph и еже с ними, да и Windows7 у меня стоит, а она врят ли адекватно поймет столь беспордонное обращение с видео-памятью, поэтому подход будет в стиле "abibas&copy;" :))), т.к. полноценное оконное приложение нам использовать нельзя...
    А именно.... Обычная программа консоли, создает саму консоль (а это есть окно ;-) ), и никто нам не запретит получить 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); //Обрисуем треугольник
    }
    }
    Добавлено: Как я уже сказал Вася, времени за компом сидеть особо нет... Так что код такой, посредственный, можно было описать подробно классы, кучу класс. членов-функций описать, но во-первых долго, во-вторых запутанно бы было... А так все понятно.... Если будет время, то может и остальные сегодня напишу...
     

    Вложения:

    • rect1.jpg
      rect1.jpg
      Размер файла:
      27,3 КБ
      Просмотров:
      45
    • rect2.jpg
      rect2.jpg
      Размер файла:
      31,3 КБ
      Просмотров:
      44
    • rect3.jpg
      rect3.jpg
      Размер файла:
      26,8 КБ
      Просмотров:
      41
  5. valis

    valis Гость

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

    DarkKnight Well-Known Member
    C\C++ Team

    Регистрация:
    1 авг 2010
    Сообщения:
    653
    Симпатии:
    0
    Код (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;
    }
     

    Вложения:

    • database.txt
      Размер файла:
      65 байт
      Просмотров:
      17
    • vasya5.jpg
      vasya5.jpg
      Размер файла:
      30,8 КБ
      Просмотров:
      33
  7. lazybiz

    lazybiz Well-Known Member
    C\C++ Team

    Регистрация:
    3 ноя 2010
    Сообщения:
    1.344
    Симпатии:
    0
    Ему Miller нравится! (не форумчанин, а то что пиво)
     
  8. vital

    vital Больной Компом Детектед
    Команда форума Web Team

    Регистрация:
    29 янв 2006
    Сообщения:
    2.474
    Симпатии:
    27
    Вы знакомы?)
    Хехе, Мне тоже миллер нравится) Хотя и не самый мой фаворит)
     
Загрузка...
Похожие Темы - Задания на Структуры
  1. Lpavel
    Ответов:
    0
    Просмотров:
    1.525
  2. KiR
    Ответов:
    2
    Просмотров:
    2.206
  3. wfall
    Ответов:
    1
    Просмотров:
    1.599
  4. Lpavel
    Ответов:
    0
    Просмотров:
    3.620
  5. Karavella
    Ответов:
    7
    Просмотров:
    2.544
Статус темы:
Закрыта.

Поделиться этой страницей