Напишите программу, запрашивающую имя, фамилия, отчество и номер группы студента и выводящую введённые данные в следующем виде:
/* ******************************** * Лабораторная работа № 1 * * Выполнил(а): ст. гр. ЗИ-123 * * Иванов Андрей Петрович * ******************************** */
Необходимо, чтобы программа сама определяла нужную длину рамки. Сама же длина рамки зависит от длины наибольшей строки внутри рамки. Используя циклы for
легко можно выровнять стороны рамки.
Очень необычное задание, такую рамку часто задают в ВУЗ-ах в качестве титульного листа. Программу написать не сложно для частного случая, но вот, если сделать универсальную рамку, нужно немного потрудиться. Результат работы программы показан на рисунке 1.
// title.cpp: определяет точку входа для консольного приложения. #include "stdafx.h" #include <iostream> #include <Windows.h> // прототипы функций SetConsoleCP() и SetConsoleOutputCP() using namespace std; int main(int argc, char* argv[]) { // Кириллица в консоли SetConsoleCP(1251); // функция устанавливает кодовую таблицу(win-cp 1251) для работы с потоком ввода SetConsoleOutputCP(1251); // функция устанавливает кодовую таблицу(win-cp 1251) для работы с потоком вывода char name[20] = "\0"; // строка для хранения имени, cout << "Введите имя студента: "; cin >> name; char surname[30] = "\0"; // строка для хранения фамилии студента cout << "Введите фамилию студента: "; cin >> surname; char patronymic[30] = "\0"; // строка для хранения отчества cout << "Введите отчество студента: "; cin >> patronymic; char group_number[10] = "\0"; // строка для хранения номера группы cout << "Введите номер группы студента: "; cin >> group_number; int len = 31; // минимальная длина рамки int len_str1 = 25 + strlen(group_number); // длина второй строки в рамке int len_str2 = strlen(name) + strlen(surname) + strlen(patronymic) + 6; // длина третьей строки // в операторе if определяем длину рамки? причём минимальная длина должна быть - 31 символ if ( len_str1 >= len_str2 && len_str1 > 31 ) len = len_str1; else if (len_str2 > 31) len = len_str2; cout << "\n\t\t\t"; // выравнивание по центру for (int counter = 0; counter < len; counter++ ) cout << "*"; cout << "\n\t\t\t* Лабораторная работа №1"; for (int counter = 0; counter < len - 25; counter++ ) cout << " "; cout << "*\n\t\t\t* Выполнил(а): ст. гр. " << group_number; for (int counter = 0; counter <= (len - len_str1); counter++ ) cout << " "; cout << "*\n\t\t\t* " << surname << " " << name << " " << patronymic; for (int counter = 0; counter <= (len - len_str2); counter++ ) cout << " "; cout << "*"; cout << "\n\t\t\t"; // выравнивание по центру for (int counter = 0; counter < len; counter++ ) cout << "*"; cout << endl; system("pause"); return 0; }
В строках 14 — 28 организуется ввод информации в программу. Минимальная длина рамки — 31 символ, в случае если ФИО или группа студента не будет помещаться внутри рамки, длина рамки увеличится на нужное количество символов. В строках 46 — 47, 50-51, 54-55 циклы for перемещают курсор, методом вывода символа пробела. После чего ставится символ ‘*’ граница рамки.
Рисунок 1 — Рамка на титул
Комментарии
EGOIST
Юрій Білоус
Мой варинат:
#include <iostream>
#include <string> // для работы со string
#include <windows.h> // нужен для вода кирилицы
using namespace std;
void titul () {
int max;
string name, name2, name3 , group;
string f = «Лабораторная работа № 1″;
cout << «Введите имя студента:»;
cin >> name;
cout << «Введите фамилию студента:»;
cin >> name2;
cout << «Введите отчество студента:»;
cin >> name3;
cout << «Введите номер группы студента:»;
cin >> group;
string s= «Выполнил(а): ст. гр. » + group;
string student = name + » » + name2 + » » + name3;
if ( f.size() > s.size() && f.size() > student.size() )
max = f.size();
else if ( student.size() > s.size() )
max = student.size();
else
max = s.size();
cout << «\t\t»;
for (int i = 0; i <= (max+4); i++ )
cout << «*»;
cout << endl << «\t\t* » << f;
for ( int i = 0; i < (max — f.size()); i++ )
cout << » «;
cout << » *» << endl;
cout << «\t\t»;
cout << endl << «\t\t* » << s;
for ( int i = 0; i < (max — s.size()); i++ )
cout << » «;
cout << » *» << endl;
cout << «\t\t»;
cout << endl << «\t\t* » << student;
for ( int i = 0; i < (max — student.size()); i++ )
cout << » «;
cout << » *» << endl;
cout << «\t\t»;
for ( int i = 0; i <= (max+4); i++ )
cout << «*»;
cout << endl;
};
int main () {
//setlocale ( NULL, «» ); // настройка языка вывода
//для корректной работы в консолив свойствах выбираем шрифт Lucida Console
SetConsoleCP ( 1251 );// установка кодовой страницы win-cp 1251 в поток ввода
SetConsoleOutputCP ( 1251 ); // установка кодовой страницы win-cp 1251 в поток вывода
titul ();
system ( «pause» );
return 0;
cppg0d
Витя Ермолин
Не заморачивайтесь) Делайте программу проще)
#include<iostream>
#include<windows.h>
using namespace std;
int main()
{
SetConsoleCP(1251);
SetConsoleOutputCP(1251);
char name[20]=»», surname[30]=»», patronymic[30]=»», group[15]=»»;
cout<<«Введите имя студента: «;
cin>>name;
cout<<«Введите фамилию студента: «;
cin>>surname;
cout<<«Введите отчество студента: «;
cin>>patronymic;
cout<<«Введите номер группу студента: «;
cin>>group;
char len_srt1[]=» Лабараторная работа №1 «;
char len_srt2[]=» Выполнил(а): ст. гр. «;
char len_srt3[]=» «;
int str1=2, str2=2, str3=2, max=0;
str1+=strlen(len_srt1);
str2+=strlen(len_srt2)+strlen(group);
str3+=strlen(len_srt3)+strlen(name)+1+strlen(surname)+1+strlen(patronymic)+1;
if(max<str1)
max=str1;
if(max<str2)
max=str2;
if(max<str3)
max=str3;
cout<<endl;
cout<<«\n\t\t\t»;
for(int i=0; i<max; i++)
cout<<«*»;
cout<<«\n\t\t\t*»<<len_srt1;
for(int i=0; i<max-(strlen(len_srt1)+2); i++)
cout<<» «;
cout<<«*\n\t\t\t*»<<len_srt2<<group;
for(int i=0; i<max-(strlen(len_srt2)+2+strlen(group)); i++)
cout<<» «;
cout<<«*\n\t\t\t*»<<len_srt3<<name<<» «<<surname<<» «<<patronymic;
for(int i=0; i<max-(strlen(len_srt3)+1+strlen(name)+strlen(surname)+strlen(patronymic)+3); i++)
cout<<» «;
cout<<«*\n\t\t\t»;
for(int i=0; i<max; i++)
cout<<«*»;
cout<<endl;
system(«pause»);
return 0;
}
Лис Необыкновенный
colt