Форум программистов, компьютерный форум CyberForum.ru

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
ton4ik
2 / 2 / 0
Регистрация: 14.10.2009
Сообщений: 28
#1

Структуры. - C++

19.11.2009, 16:15. Просмотров 504. Ответов 4
Метки нет (Все метки)

Постановка задачи. Разработать программу, выполняющую следующие функции:
• ввод данных об n объектах в массив структур (1<=n<=50);
• сортировка массива структур по одному из полей структуры;
• вывод данных об объектах на экран в упорядоченном виде;
• поиск объекта по значению одного из полей.

Объект:Квартиросъемщик (номер финансового счета, ФИО, адрес, количество комнат, площадь)
Поле, по которому выполняется упорядочивание и поиск: Номер финансового счета


C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
#include <iostream.h>
#include <conio.h>
#include <string.h>
struct lodger
{
int number;
int quantity;
char name;
char address;
float area;
};
void main()
{
lodger l[1000];
int i,k,n;
lodger x;
cout<<"Input n"<<endl<<"n="; cin>>n;
for (i=0;i<n;i++)
 {
  cout<<"Financial account number:"; cin>>l[i].number; cout<<endl;
  cout<<"Name:"; cin>>l[i].name; cout<<endl;
  cout<<"Address:"; cin>>l[i].address; cout<<endl;
  cout<<"Quantity of rooms:"; cin>>l[i].quantity; cout<<endl;
  cout<<"Area:"; cin>>l[i].area; cout<<endl;
 }
for (k=1;k<n;k++)
 for (i=0;i<n-k;i++)
   {if (l[i].number<l[i+1].number)
   { x=l[i]; l[i]=l[i+1]; l[i+1]=x;}}
   for (i=0;i<n;i++)
   cout<<l[i].number<<" "<<l[i].name<<" "<<l[i].address<<" "<<l[i].quantity<<" "<<l[i].area<<endl;
getch();
}

немогу ввести данные, она както подвисает, сначало нормально по строчкам можно ввести, а потом сразу выкидывает все строчки которые нужно было бы ввести и ждет последнего нажатия любой кнопочки и все.( я незнаю как точно объяснгить)
добавил скриншотик, думаю по нему понятнее будет вникнуть в суть проблемы.
Миниатюры
Структуры.  
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
19.11.2009, 16:15     Структуры.
Посмотрите здесь:

Структуры C++
C++ СТРУКТУРЫ в СИ++
C++ Структуры.
C++ Структуры
Структуры C++
Структуры C++
C++ Структуры
C++ Структуры
C++ структуры C++
Структуры C++
C++ Структуры c++
Структуры C++

Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
insolent
 Аватар для insolent
826 / 347 / 15
Регистрация: 30.01.2009
Сообщений: 1,204
19.11.2009, 18:57     Структуры. #2
ton4ik, стек не резиновый и столько не вместит.
Вместо этого
C++
1
lodger l[1000];
нужно, так (как у тебя в задании говорится)
C++
1
lodger l[50];
или через динамическую память..

+

в структуре lodger переменные name и address хранят только один символ?
Если нет, то использюй string:
C++
1
2
3
4
5
6
7
8
9
#include <string>
struct lodger
{
    int number;
    int quantity;
    string name;
    string address;
    float area;
};
, но тогда для ввода нужно будет использовать getline:
C++
1
getline(cin,/*имя переменной*/);
или используй массив символов.
ton4ik
2 / 2 / 0
Регистрация: 14.10.2009
Сообщений: 28
20.11.2009, 00:20  [ТС]     Структуры. #3
теперь я написал вот так:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
#include <iostream.h>
#include <conio.h>
#include <string.h>
struct lodger
{
int number;
char name[];
char address[];
int quantity;
float area;
};
void main()
{
lodger *l;
int i,k,n;
lodger x;
cout<<"Input n"<<endl<<"n="; cin>>n;
l = new lodger [n];
for (i=0;i<n;i++)
 {
  cout<<"User:"<<i+1<<endl;
  cout<<"Financial account number:"; cin>>l[i].number;
  cout<<"Name:"; cin.get(); cin.getline(l[i].name,30);
  cout<<"Address:"; cin.getline(l[i].address,35);
  cout<<"Quantity of rooms:"; cin>>l[i].quantity;
  cout<<"Area:"; cin>>l[i].area; cout<<endl;
 }
  cout<<"Sorted lodgers:"<<endl;
for (k=1;k<n;k++)
 for (i=0;i<n-k;i++)
   {if (l[i].number<l[i+1].number)
   { x=l[i]; l[i]=l[i+1]; l[i+1]=x;}}
   for (i=0;i<n;i++)
   cout<<l[i].number<<" "<<l[i].name<<" "<<l[i].address<<" "<<l[i].quantity<<" "<<l[i].area<<endl;
getch();
delete [] l;
}
и на выводе, там где я задавал строчки син.гетлайн выдает какие то символы типо сердечка смайлика или еще чегонибудь, вот скриншотик для лучшего объясениния опять прикреплю
в чем ошибочка?
Миниатюры
Структуры.  
insolent
 Аватар для insolent
826 / 347 / 15
Регистрация: 30.01.2009
Сообщений: 1,204
20.11.2009, 01:54     Структуры. #4
ton4ik, в структуре lodger ты пытался объявить массивы
char name[];
char address[];
, но нужно же и указывать сколько элементов в массиве:
C++
1
2
3
4
5
6
7
8
9
const int LEN = 80;
struct lodger
{
    int number;
    int quantity;
    char name[LEN];
    char address[LEN];
    float area;
};
и при вводе делать так(например, переменная name):
C++
1
cin.getline(l[i].name,LEN);
ton4ik
2 / 2 / 0
Регистрация: 14.10.2009
Сообщений: 28
25.11.2009, 22:15  [ТС]     Структуры. #5
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
cout<<"Input search element: "; cin>>y; cout<<endl;
   left=0;
   right=n-1;
   m=(left+right)/2;
   while(left<=right && y!=l[m].number)
   if (y<l[m].number)
    right=m-1;
   else
    left=m+1;
   if(left<=right)
    cout<<l[m].number<<" "<<l[m].name<<" "<<l[m].address<<" "<<l[m].quantity<<" "<<l[m].area<<endl;
   else
    cout<<l[m-1].number<<" "<<l[m-1].name<<" "<<l[m-1].address<<" "<<l[m-1].quantity<<" "<<l[m-1].area<<endl;
а в чем здесь ошибочка? поиск какбэ неработает..
вот вся программа:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
#include <iostream.h>
#include <conio.h>
#include <string.h>
struct lodger
{
int number;
char name[85];
char address[85];
int quantity;
float area;
};
void main()
{
lodger *l;
int i,j,k,y,n,m,left,right;
lodger x;
cout<<"Input n"<<endl<<"n="; cin>>n;
l = new lodger [n];
for (i=0;i<n;i++)
 {
  cout<<"User: "<<i+1<<endl;
  cout<<"Financial account number:"; cin>>l[i].number;
  cout<<"Name:"; cin.get(); cin.getline(l[i].name,85);
  cout<<"Address:"; cin.getline(l[i].address,85);
  cout<<"Quantity of rooms:"; cin>>l[i].quantity;
  cout<<"Area:"; cin>>l[i].area; cout<<endl;
 }
 clrscr();
  cout<<"Sorted lodgers:"<<endl;
for (k=1;k<n;k++)
 for (i=0;i<n-k;i++)
   {if (l[i].number>l[i+1].number)
   { x=l[i]; l[i]=l[i+1]; l[i+1]=x;}}
   for (i=0;i<n;i++)
   cout<<l[i].number<<" "<<l[i].name<<" "<<l[i].address<<" "<<l[i].quantity<<" "<<l[i].area<<endl;
   cout<<"Input search element: "; cin>>y; cout<<endl;
   left=0;
   right=n-1;
   m=(left+right)/2;
   while(left<=right && y!=l[m].number)
   if (y<l[m].number)
    right=m-1;
   else
    left=m+1;
   if(left<=right)
    cout<<l[m].number<<" "<<l[m].name<<" "<<l[m].address<<" "<<l[m].quantity<<" "<<l[m].area<<endl;
   else
    cout<<l[m-1].number<<" "<<l[m-1].name<<" "<<l[m-1].address<<" "<<l[m-1].quantity<<" "<<l[m-1].area<<endl;
   getch();
delete [] l;
}
Yandex
Объявления
25.11.2009, 22:15     Структуры.
Ответ Создать тему
Опции темы

Текущее время: 13:49. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru