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

Структуры. исправьте пожалуйста... - C++

Восстановить пароль Регистрация
 
elvipka
1 / 1 / 0
Регистрация: 22.10.2011
Сообщений: 54
30.11.2011, 18:01     Структуры. исправьте пожалуйста... #1
Описать структуру с именем NOTE, содержащую следующие поля:
• фамилия, имя;
• номер телефона;
• день рождения (массив из трех чисел).
2. Написать программу, выполняющую следующие действия:
• ввод с клавиатуры данных в массив, состоящий из восьми элементов типа NOTE; записи должны быть размещены по алфавиту;
• вывод на экран информации о людях, чьи дни рождения приходятся на месяц, значение которого введено с клавиатуры;
• если таких нет, выдать на дисплей соответствующее сообщение.
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
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
#include <iostream>
#include <stdlib.h>
#include <conio.h>
#include <string.h>
using namespace std;
 
 
struct note
{
        char name[30];
        int telnumb;
        int date[3];
};
 
void vvod(note* pt,int n)
{
        for(int i=0;i<n;i++)
        {
                cout<<"vvedite familiyu\n";
                cin>>pt[i].name;
                cout<<"vvedite nom telophona\n";
                cin>>pt[i].telnumb;
                cout<<"vvedite datu rozhdeniya:\n";
                for (int j=0;j<3;j++)
                {
                        cin>>pt[i].date[j];
                }
 
        }
}
 
void sort(note* pt,int n)
{
   char m[30];
   char* tmp=m;
   for (int i=0;i<n;i++)
                if (strcmp(pt[i].name,pt[i+1].name)<0)
                {
                        strcpy(tmp,pt[i].name);
                        strcpy(pt[i].name,pt[i+1].name);
                        strcpy(pt[i+1].name,tmp);
                }
}
void vuvod(note* pt, int n)
{
        for (int i=0;i<n;i++)
        {
                cout<<pt[i].name<<"\n";
                cout<<pt[i].telnumb<<"\n";
                for (int j=0;j<3;j++)
                  cout<<pt[i].date[j]<<"\n";
        }
}
 
void otp(note* pt,int n, int month)
{
        for (int i=0;i<n;i++)
                if (pt[i].date[2]==month)
                {
                cout<<pt[i].name;
                cout<<pt[i].telnumb;
                for (int j=0;j<3;j++)
                 cout<<pt[i].date[j];
                }
                else cout<<"Takih ludey net";
};
 
int main()
{
        const int n=3;
        note* spisok=new note[n];
        vvod(spisok,n);
        sort (spisok,n);
        vuvod(spisok,n);
        otp (spisok,n,month);
        getch();
 
return 0;
}
ошибка в этом блоке, пишет что "error: 'month' was not declared in this scope"

C++
1
2
3
4
5
6
7
8
9
int main()
{
        const int n=3;
        note* spisok=new note[n];
        vvod(spisok,n);
        sort (spisok,n);
        vuvod(spisok,n);
        otp (spisok,n,month);
        getch();
честно скажу, я в структурах ничего не знаю....
помогиитее!)))
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
lemegeton
 Аватар для lemegeton
2910 / 1339 / 133
Регистрация: 29.11.2010
Сообщений: 2,720
30.11.2011, 18:05     Структуры. исправьте пожалуйста... #2
И ведь не врет. Действительно, в используемой области видимости переменная month нигде не объявлена/инициализирована.
elvipka
1 / 1 / 0
Регистрация: 22.10.2011
Сообщений: 54
30.11.2011, 18:59  [ТС]     Структуры. исправьте пожалуйста... #3
Цитата Сообщение от lemegeton Посмотреть сообщение
И ведь не врет. Действительно, в используемой области видимости переменная month нигде не объявлена/инициализирована.
тыкните пожалуйста в позицию куда нужно вставить этот "month")

Добавлено через 43 минуты
так. исправила самостоятельно.
но теперь не выводит те записи месяц которой совпадает с месяцем введенного с клавы..
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
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
#include <iostream>
#include <stdlib.h>
#include <conio.h>
#include <string.h>
 
using namespace std;
int k;
 
 
struct note
{
        char name[30];
        int telnumb;
        int date[3];
};
 
void vvod(note* pt,int n)
{
        for(int i=0;i<n;i++)
        {
                cout<<"vvedite familiyu\n";
                cin>>pt[i].name;
                cout<<"vvedite nom telophona\n";
                cin>>pt[i].telnumb;
                cout<<"vvedite datu rozhdeniya:\n";
                for (int j=0;j<3;j++)
                {
                        cin>>pt[i].date[j];
                }
 
        }
}
 
void sort(note* pt,int n)
{
   char m[30];
   char* tmp=m;
   for (int i=0;i<n;i++)
                if (strcmp(pt[i].name,pt[i+1].name)<0)
                {
                        strcpy(tmp,pt[i].name);
                        strcpy(pt[i].name,pt[i+1].name);
                        strcpy(pt[i+1].name,tmp);
                }
}
void vuvod(note* pt, int n)
{
        for (int i=0;i<n;i++)
        {
                cout<<pt[i].name<<"\n";
                cout<<pt[i].telnumb<<"\n";
                for (int j=0;j<3;j++)
                  cout<<pt[i].date[j]<<"\n";
        }
}
 
void otp(note* pt,int n)
{
        cout<<"vvedite mesyac\n";
        cin>>k;
        for (int i=0;i<n;i++)
                if (pt[i].date[2]==k)
                {
                cout<<pt[i].name;
                cout<<pt[i].telnumb;
                for (int j=0;j<3;j++)
                 cout<<pt[i].date[j];
                }
                else cout<<"Takih ludey net";
};
 
int main()
{
        const int n=3;
        note* spisok=new note[n];
        vvod(spisok,n);
        sort (spisok,n);
        vuvod(spisok,n);
        otp (spisok,n);
        getch();
 
return 0;
}
lemegeton
 Аватар для lemegeton
2910 / 1339 / 133
Регистрация: 29.11.2010
Сообщений: 2,720
30.11.2011, 19:51     Структуры. исправьте пожалуйста... #4
Просто огромное количество недочетов. Начиная с некорректной работы с памятью.
Попробуйте создавать функцию на каждый чих. Например:
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
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
#include <iostream>
#include <cstring>
 
struct Note {
  char *name;
  size_t phone;
  size_t birthday[3];
};
 
Note *newNote(const char *name, size_t phone, size_t birthYear,
  size_t birthMonth, size_t birthDay) {
  Note *note = new Note;
  note->name = strcpy(new char[strlen(name) + 1], name);
  note->phone = phone;
  note->birthday[0] = birthYear;
  note->birthday[1] = birthMonth;
  note->birthday[2] = birthDay;
  return note;
}
 
void deleteNote(Note *note) {
  delete [] note->name;
  delete note;
}
 
void printNote(Note *note) {
  std::cout << "Name: " << note->name << "; phone: " << note->phone <<
    "; birthday: " << note->birthday[2] << "/" << note->birthday[1] <<
    "/" << note->birthday[0] << "." << std::endl;
}
 
void insertSorted(Note *note, Note **notes, size_t size) {
  size_t index = 0;
  for (; index < size; ++index)
    if (strcmp(note->name, notes[index]->name) < 0)
      break;
  for (size_t i = size; i > index; --i)
    notes[i] = notes[i - 1];
  notes[index] = note;
}
 
void printNotes(Note **notes, size_t size) {
  for (size_t i = 0; i < size; ++i)
    printNote(notes[i]);
}
 
void printNotesWithMonth(Note **notes, size_t size, size_t month) {
  for (size_t i = 0; i < size; ++i)
    if (notes[i]->birthday[1] == month)
      printNote(notes[i]);
}
 
int main(int argc, char *argv[]) {
  size_t capacity = 8;
  Note **notes = new Note*[capacity];
  size_t size = 0;
  
  // вводить лень, поэтому захардкожено
  insertSorted(newNote("Ivan Ivanov", 3144515, 1975, 11, 1), notes, size++);
  insertSorted(newNote("Sergey Petrov", 3144517, 1978, 7, 21), notes, size++);
  insertSorted(newNote("Petr Ivanov", 3144516, 1976, 7, 5), notes, size++);
  insertSorted(newNote("Ilya Sidorov", 3144518, 1974, 3, 22), notes, size++);
  insertSorted(newNote("Alexey Sergeev", 3144519, 1978, 2, 13), notes, size++);
  insertSorted(newNote("Andrey Kuznetsov", 3144520, 1976, 4, 15), notes, size++);
  insertSorted(newNote("Sergey Alexeev", 3144521, 1973, 1, 9), notes, size++);
  insertSorted(newNote("Anatoliy Morgin", 3144522, 1971, 1, 7), notes, size++);
  
  printNotes(notes, size);
 
  size_t month = 1;
 
  std::cout << std::endl << "Notes with month = " << month << ":" << std::endl;
 
  printNotesWithMonth(notes, size, 1);
  
  for (size_t i = 0; i < size; ++i)
    deleteNote(notes[i]);
  delete [] notes;
  return 0;
}
И повнимательней с динамической памятью. Её освобождать нужно.
elvipka
1 / 1 / 0
Регистрация: 22.10.2011
Сообщений: 54
30.11.2011, 20:00  [ТС]     Структуры. исправьте пожалуйста... #5
спасибо)
попытаюсь вникнуть!)
Yandex
Объявления
30.11.2011, 20:00     Структуры. исправьте пожалуйста...
Ответ Создать тему
Опции темы

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