• B правой части каждого сообщения есть стрелки и . Не стесняйтесь оценивать ответы. Чтобы автору вопроса закрыть свой тикет, надо выбрать лучший ответ. Просто нажмите значок в правой части сообщения.

Интереснейшая Задача Для Развития

  • Автор темы Edip
  • Дата начала
E

Edip

Заданы сведения о книгах: автор, название, издательство, год издания, количество страниц, шифр. Напишите программу, которая по команде пользователя будет выполнять одно из следующих действий:

Вводить сведения о новой книге.
Выводить в файл сведения о заданной книге (по шифру).
Сортировать множество книг по шифру.
Проверять и, если необходимо, редактировать записи так, чтобы автор и название книги были написано с большой буквы.
Выводить на экран сведения о первых n книгах.
 
W

Whatka

Я наивно полагал,что задача действительно интересная,увы.
Это самая распространённая задача на работу со структурами/класами для начинающих.

Возможно вам нужна помощь,тогда вопросы или ваш исходник в студию.
 
E

Edip

Я наивно полагал,что задача действительно интересная,увы.
Это самая распространённая задача на работу со структурами/класами для начинающих.

Возможно вам нужна помощь,тогда вопросы или ваш исходник в студию.
с с++ у меня проблемы, поэтому я хотел бы попросить помощи ее решить( буду благодарен искренне
 
W

Whatka

За вас делать задачу никто не будет.
Задавайте вопросы по коду,вопросы по стукруре программы в целом,по алгоритму,показывайте СВОЙ код с ошибкой\проблемой,тогда
вам помогут,если нет - значит нет.
 
E

Edip

C++:
#include<iostream>
#include<vector>
#include<algorithm>
#include<string>
#include<fstream>
using namespace std;
struct book
{
string name;
string autor;
int year;
int key;//шифр
};
book input(book &x);
void save(book y);
void print(book a);
void comparison(book k);
bool Sort(book a,book b);
void main()
{
int x;
vector <book> v;
book tmp=input(tmp);
v.push_back(tmp);
cout<<"Enter the number of comand(1, 2, 3, 4 or 5)"<<endl;
cin>>x;
switch (x){
case 1: book new_tmp=input(new_tmp);
case 2: save(tmp);
case 3: sort(v.begin(),v.end(),Sort);
case 4: comparison(tmp);
case 5: print(tmp);
default: cout<<"Unknown command!"<<endl;
cin.get();
cin.get();
}
book input(book &x)// ввод информации о новой книге
{
cout<<"Enter the book autor: "<<endl;
cin>>x.autor;
cout<<"Enter name of the book: "<<endl;
cin>>x.name;
cout<<"Enter year of publishing: "<<endl;
cin>>x.year;
cout<<"Enter the shifr: "<<endl;
cin>>x.key;
return x;
}
void save(book y)// запись информации в файл по шифру книги
{
int id;
ofstream fl("Information.txt");
cout<<"Enter the id: "<<endl;
cin>>id;
if(id==y.key)
{
fl<<y.name<<' '<<y.autor<<' '<<y.year<<endl;
fl.close();
}
}
void print(book a)// вывод на экран сведений о книге
{
cout<<a.name<<' '<<a.autor<<' '<<a.year<<' '<<a.key<<endl;
}
bool Sort(book a, book b)// сортировка множества книг по шифру
{
if(a.key>b.key)
return true;
return false;
}
void comparison(book k)// проверка на первую букву названия книги и ее редактирование
{
if(k.name[0]>='a' && k.name[0]<='z')
k.name[0]+='A'-'a';
if(k.autor[0]>='a' && k.autor[0]<='z')
k.autor[0]+='A'-'a';
}
switch не работает
можно ли заменить if? если да, то как?

Добавлено:
C++:
#include<iostream>
#include<vector>
#include<algorithm>
#include<string>
#include<fstream>
using namespace std;
struct book
{
string name;
string autor;
int year;
int key;//шифр
};
book input(book &x);
void save(book y);
void print(book a);
void comparison(book k);
bool Sort(book a,book b);
void main()
{
int x;
vector <book> v;
book tmp=input(tmp);
v.push_back(tmp);
cout<<"Enter the number of comand(1, 2, 3, 4 or 5)"<<endl;
cin>>x;
switch (x){
case 1: book new_tmp=input(new_tmp);
case 2: save(tmp);
case 3: sort(v.begin(),v.end(),Sort);
case 4: comparison(tmp);
case 5: print(tmp);
default: cout<<"Unknown command!"<<endl;
cin.get();
cin.get();
}
book input(book &x)// ввод информации о новой книге
{
cout<<"Enter the book autor: "<<endl;
cin>>x.autor;
cout<<"Enter name of the book: "<<endl;
cin>>x.name;
cout<<"Enter year of publishing: "<<endl;
cin>>x.year;
cout<<"Enter the shifr: "<<endl;
cin>>x.key;
return x;
}
void save(book y)// запись информации в файл по шифру книги
{
int id;
ofstream fl("Information.txt");
cout<<"Enter the id: "<<endl;
cin>>id;
if(id==y.key)
{
fl<<y.name<<' '<<y.autor<<' '<<y.year<<endl;
fl.close();
}
}
void print(book a)// вывод на экран сведений о книге
{
cout<<a.name<<' '<<a.autor<<' '<<a.year<<' '<<a.key<<endl;
}
bool Sort(book a, book b)// сортировка множества книг по шифру
{
if(a.key>b.key)
return true;
return false;
}
void comparison(book k)// проверка на первую букву названия книги и ее редактирование
{
if(k.name[0]>='a' && k.name[0]<='z')
k.name[0]+='A'-'a';
if(k.autor[0]>='a' && k.autor[0]<='z')
k.autor[0]+='A'-'a';
}
switch не работает
можно ли заменить if? если да, то как?
 
W

Whatka


(конец страницы,для справки)
а в кратце в каждом case в конце нужен свой break;(для выхода из свича)

например:
Код:
//...
switch(x)
{
case 1:
print(tmp);
break;
case 2:
//...
 
E

Edip

C++:
 book tmp=input(tmp);
v.push_back(tmp);
каковы ф-ции этих строк?
например:
Код:
//...
switch(x)
{
case 1:
print(tmp);
break;
case 2:
//...

Добавлено:
C++:
 book tmp=input(tmp);
v.push_back(tmp);
каковы ф-ции этих строк?
например:
Код:
//...
switch(x)
{
case 1:
print(tmp);
break;
case 2:
//...
 
W

Whatka

C++:
//
void main()
{
int x;
vector <book> v;
book tmp=input(tmp);
v.push_back(tmp);
cout<<"Enter the number of comand(1, 2, 3, 4 or 5)"<<endl;
cin>>x;
switch (x)
{
case 1: book new_tmp=input(new_tmp);v.push_back(new_tmp);break;
case 2: save(tmp);break;
case 3: sort(v.begin(),v.end(),Sort);break;
case 4: comparison(tmp);break;
case 5: print(tmp);break;
default: cout<<"Unknown command!"<<endl;
}
cin.get();
cin.get();
}

//
 
E

Edip

подчеркивает switch и выдает ошибку: передача управления в обход инициализации: переменная new_tmp;

Добавлено: подчеркивает switch и выдает ошибку: передача управления в обход инициализации: переменная new_tmp;
 
W

Whatka

аа ну да,нельзя объявлять переменные внутри case
сделай перед свичом переменную и в неё записывай данные,
сохраняй в вектор,а потом очищай эту переменную
 
R

rrrFer

аа ну да,нельзя объявлять переменные внутри case
сделай перед свичом переменную и в неё записывай данные,
сохраняй в вектор,а потом очищай эту переменную
можно, но надо тело кэйза взять в фигурные скобки. Это логично.

C++:
switch (a) {
case 1: {
int b = 0;
} break;
}
область видимости очевидно будет ограничена скобками, как всегда.

За вас делать задачу никто не будет.
Я буду делать, за деньги, может быть.
 
Мы в соцсетях:

Обучение наступательной кибербезопасности в игровой форме. Начать игру!