Stitchi16
Junior Member | Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору Задание: Представим, что нам в дальнейшем надо будет иметь дело с ядром, вылетевшем из пушки. Необходимо реализовать: Ввод скорости ядра, время полета и угла, под которым оно вылетело. Вычислить местоположение ядра, считая, что на него не действует сила притяжения и отсутствует сопротивление воздуха. С новой строки выводятся скорость ядра, время полета и угол. Скорость выводится в десятичной, шестнадцатеричной и восьмеричной системе. С новой строки - положение на земле, которое достигнет ядро через некоторое время. В программе предусмотреть обработку ошибок, вывод комментариев, используя свои манипуляторы, установить ширину поля 20 и символы заполнения (, проверить какие флаги потока ввода-вывода установлены, и заменить попарно: левое выравнивание на правое выравнивание (и наоборот). Организовать форматированный вывод результатов программы в файл, используя fsrteam. Записать результаты работы (скорость ядра, время полета, угол и расстояние на земле) в неформатированный файл-поток, используя функции write класса fsrtream. После записи результатов в файл, закрыть его. Затем открыть, прочитать (read) время полета и дописать снова это число в конец файла. Вот что у меня получилось: Код: // stream.cpp - использование стандартного ввода - вывода на C++ #include <iostream> #include <cmath> #include <iomanip> #include <fstream> using namespace std; ostream &comment(ostream &stream) { stream << "[COMMENT]Calculation...\n"; return stream; } ostream &error(ostream &stream) { stream << "[PROCESSING]ERROR! Please enter other data.\n"; return stream; } int main() { // создание файла для форматированного вывода результатов ofstream fout("outfile.txt"); // создание файла для неформатированного вывода результатов ofstream nfout("not formated", ios::out | ios::binary); // ввод данных int speed; cout << "Enter speed of a kernel (Kph): "; cin >> speed; double corner; cout << "Enter a corner of flight of a kernel (degrees): "; cin >> corner; int flightTime; cout << "Enter time of flight of a kernel (minutes): "; cin >> flightTime; cout << "\n"; // вывод данных // скорость cout.fill('*'); cout << "Speed of a kernel: \n"; cout << setw(20) << setiosflags(ios::left) << speed << "\n"; cout.unsetf(ios::left); cout << setw(20) << setiosflags(ios::right) << speed << " - dec" << "\n"; cout << setw(20) << setiosflags(ios::right) << oct << speed << "\n"; cout.unsetf(ios::right); cout << setw(20) << setiosflags(ios::left) << oct << speed << " - oct" << "\n"; cout << setw(20) << setiosflags(ios::left) << hex << speed << "\n"; cout.unsetf(ios::left); cout << setw(20) << setiosflags(ios::right)<< hex << speed << " - hex" << "\n\n"; cout.unsetf(ios::hex); // проверка условия (использование манипулятора "error") if (speed <= 0) { cout << error << "\n"; } // угол cout << "Corner of flight of a kernel: \n"; cout << setw(20) << setiosflags(ios::right) << corner << "\n"; cout.unsetf(ios::right); cout << setw(20) << setiosflags(ios::left) << corner << "\n\n"; // проверка условия (использование манипулятора "error") if (corner <= 0) { cout << error << "\n"; } // время полета cout << "Time of flight of a kernel: \n"; cout << setw(20) << setiosflags(ios::left) << flightTime << "\n"; cout.unsetf(ios::left); cout << setw(20) << setiosflags(ios::right) << flightTime << "\n\n"; // проверка условия (использование манипулятора "error") // использование манипулятора "comment" cout << comment << "\n"; // расчет дистанции double distance = (speed * flightTime) * cos(corner); cout << "Distance passed by a kernel (metres): \n"; cout << setw(20) << setiosflags(ios::right) << distance << "\n"; cout.unsetf(ios::right); cout << setw(20) << setiosflags(ios::left) << distance << "\n\n"; cout.unsetf(ios::left); // проверка условия (использование манипулятора "error") if (distance <= 0) { cout << error << "\n"; } // запись данных с форматированным выводом в файл fout << "speed = " << speed << "\n"; fout << "corner = " << corner << "\n";; fout << "flight time = " << flightTime << "\n"; fout.close(); // запись данных с неформатированным выводом в файл nfout.write((char*) &speed, sizeof(speed)); nfout.write((char*) &flightTime, sizeof(flightTime)); nfout.write((char*) &corner, sizeof(corner)); nfout.write((char*) &distance, sizeof(distance)); nfout.close(); // чтение занчения времени полета ifstream nfin("not formated", ios::in | ios::binary); nfin.seekg(-sizeof(double), ios::end); nfin.read((char*) &flightTime, sizeof(flightTime)); nfin.close(); // запись значения в конец файла ofstream nffout("not formated", ios::out | ios::binary | ios::app); nffout.write((char*) &flightTime, sizeof(flightTime)); nfin.close(); // состояние флага if ((cout.flags() & ios::left)) { cout << "The left flag is established: \n"; } getchar(); getchar(); return 0; } | Делал под Visual C++ 2008. 1. Помогите сделать вывод флагов: Код: // состояние флага if ((cout.flags() & ios::left)) { cout << "The left flag is established: \n"; } | Почему - то не вывод результат. Должно быть, если флаг выключен - 0, если включен - 1 2. Как проверить дописывает ли значение? Код: // запись данных с неформатированным выводом в файл nfout.write((char*) &speed, sizeof(speed)); nfout.write((char*) &flightTime, sizeof(flightTime)); nfout.write((char*) &corner, sizeof(corner)); nfout.write((char*) &distance, sizeof(distance)); nfout.close(); // чтение занчения времени полета ifstream nfin("not formated", ios::in | ios::binary); nfin.seekg(-sizeof(double), ios::end); nfin.read((char*) &flightTime, sizeof(flightTime)); nfin.close(); // запись значения в конец файла ofstream nffout("not formated", ios::out | ios::binary | ios::app); nffout.write((char*) &flightTime, sizeof(flightTime)); nfin.close(); | Проверте... |