Форум программистов, компьютерный форум, киберфорум
Наши страницы
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
Рейтинг 5.00/5: Рейтинг темы: голосов - 5, средняя оценка - 5.00
кверти
4 / 4 / 3
Регистрация: 22.09.2013
Сообщений: 166
Завершенные тесты: 2
1

Программа по созданию АТД "Фотоаппарат"

18.09.2014, 10:39. Просмотров 929. Ответов 5
Метки нет (Все метки)

Нужно создать АТД - фотоаппарат. Поля структуры: Название, Количество кадров в заряженной пленке, Номер текущего кадра. Реализовать следующие функции:
• зарядить в фотоаппарат новую пленку с заданным количеством кадров
• осуществлять покадровую съемку;
• извлекать пленку из фотоаппарата;
• выводить информацию о текущем состоянии фотоаппарата на экран.
Возникла проблема с указателем. Код ниже.
Заголовочный файл:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
#include <iostream>
#include <conio.h>
#include <string>
#include <tchar.h>
using namespace std;
 
struct Photo{
    char* ID_Photo;     //Модель фотоаппарата.
    int Frame;          //Количество кадров в заряженной пленке.
    int Number_Frame;   //Номер текущего кадра.
};
 
void Frame_New(); //зарядить в фотоаппарат новую пленку с заданным количеством кадров
void Single_shooting(); //Покадровая съемка.
void Removing_the_film();//Извлечь пленку.
void Printf_information_Photo();//Вывод информации.
main()
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
#include "Header.h"
void main()
{
    setlocale(0,"");
    Photo *a;
    a = new Photo;
    cout << "Введите название фотоаппарата: "; gets((*a).ID_Photo);
    cout << "Введите количество кадров в пленке: "; cin >> (*a).Frame;
    (*a).Number_Frame = 1;
    int flag = 0;
    while(flag != 5)
    {
        cout << "Введите 1, чтобы зарядить в фотоаппарат новую пленку." << endl 
             << "Введите 2, чтобы сделать покадровую съемку."           << endl
             << "Введите 3, чтобы извлечь пленку."                      << endl
             << "Введите 4, чтобы вывести информацию о состоянии фотоаппарата." << endl
             << "Введите 5, чтобы завершить работу." << endl;
        cin >> flag;
        if (flag == 5)
            break;
        else
        {
            switch(flag)
            {
                case 1:
                {
                    Frame_New();
                    break;
                }
                case 2:
                {
                    Single_shooting();
                    break;
                }
                case 3:
                {
                    Removing_the_film();
                    break;
                }
                case 4:
                {
                    Printf_information_Photo();
                    break;
                }
            }
        }
    }
    _getch();
}
Остальные функции пока-что не реализованны.
Объясните почему неправильный указатель на поле char* ID_Photo; //Модель фотоаппарата.
А также скажите как правильно в дальнейшем вызывать функции и описывать функции? Интересует, то какие параметры будут в функциях.
Буду очень благодарен за обьяснения, а то что-то запутался в этом всем.
И в дополнении: почему-то не смог использовать для считывания строки getline(cin,(*a).ID_Photo);
0
Лучшие ответы (1)
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
18.09.2014, 10:39
Ответы с готовыми решениями:

В зависимости от времени года "весна", "лето", "осень", "зима" определить погоду "тепло", "жарко", "холодно", "очень холодно"
В зависимости от времени года &quot;весна&quot;, &quot;лето&quot;, &quot;осень&quot;, &quot;зима&quot; определить...

АТД список. Заменить меньшую часть списка символом "#"
Здравствуйте!! Подскажите пожалуйста!! Нужна заменить меньшую часть...

Перегрузка операций АТД "Множество элементов типа char"
Нужен код С++ Порядок выполнения работы. 1. Выбрать класс абстрактного типа...

АТД "Однонаправленный список" с элементами типа char
помогите пожалуйста) АТД − однонаправленный список с элементами типа char....

Поиск дискриминанта, АТД "Квадратное уравнение"
нужно создать АТД квадратное уравнение, с выводом корней и самого уравнения на...

5
zss
Модератор
Эксперт С++
7480 / 6849 / 4324
Регистрация: 18.12.2011
Сообщений: 18,114
Завершенные тесты: 1
18.09.2014, 10:46 2
Лучший ответ Сообщение было отмечено кверти как решение

Решение

C++
1
2
3
4
5
6
Photo *a;
    a = new Photo;
    a->ID_Photo=new char[256]; // можно в объявлении указать  char ID_Photo[256];
    cout << "Введите название фотоаппарата: "; cin.getline(a->ID_Photo,256);
    cout << "Введите количество кадров в пленке: "; (cin >> a->Frame).get();
    a->Number_Frame = 1;
Функции тоже надо сделать членами структуры и они будут иметь доступ к данным структуры:
C++
1
2
3
4
5
6
7
8
9
10
11
12
struct Photo{
public:
    char* ID_Photo;     //Модель фотоаппарата.
    int Frame;          //Количество кадров в заряженной пленке.
    int Number_Frame;   //Номер текущего кадра.
    void Frame_New(); //зарядить в фотоаппарат новую пленку с заданным количеством кадров
    void Single_shooting(); //Покадровая съемка.
    void Removing_the_film();//Извлечь пленку.
    void Printf_information_Photo();//Вывод информации.
};
...
     a->Frame_New(); // Тогда функции вызываться будут так
1
кверти
4 / 4 / 3
Регистрация: 22.09.2013
Сообщений: 166
Завершенные тесты: 2
18.09.2014, 10:49  [ТС] 3
-> используется потому-что указатель?
0
dzrkot
zzzZZZ...
523 / 354 / 94
Регистрация: 11.09.2013
Сообщений: 2,039
18.09.2014, 10:53 4
Цитата Сообщение от кверти Посмотреть сообщение
-> используется потому-что указатель?
угумс
1
кверти
4 / 4 / 3
Регистрация: 22.09.2013
Сообщений: 166
Завершенные тесты: 2
18.09.2014, 18:12  [ТС] 5
Возникла проблема при вызове функции методом a->Frame_New(); Показывается ошибка:
C++
1
2
3
4
5
6
1>Компоновка...
1>main.obj : error LNK2019: ссылка на неразрешенный внешний символ "public: void __thiscall Photo::Frame_New(void)" (?Frame_New@Photo@@QAEXXZ) в функции _main
1>C:\Users\Егор\Documents\Visual Studio 2008\Projects\ATD_Photo\Debug\ATD_Photo.exe : fatal error LNK1120: 1 неразрешенных внешних элементов
1>Журнал построения был сохранен в "file://c:\Users\Егор\Documents\Visual Studio 2008\Projects\ATD_Photo\ATD_Photo\Debug\BuildLog.htm"
1>ATD_Photo - ошибок 2, предупреждений 0
========== Построение: успешно: 0, с ошибками: 1, без изменений: 0, пропущено: 0 ==========
Ниже весь код программы.
Заголовочный файл:
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
#include <iostream>
#include <conio.h>
#include <string>
#include <tchar.h>
using namespace std;
 
struct Photo{
public:
    char* ID_Photo;     //Модель фотоаппарата.
    int Frame;          //Количество кадров в заряженной пленке.
    int Number_Frame;   //Номер текущего кадра.
    void Frame_New(); //зарядить в фотоаппарат новую пленку с заданным количеством кадров.
    void Single_shooting(); //Покадровая съемка.
    void Removing_the_film();//Извлечь пленку.
    void Printf_information_Photo();//Вывод информации.
};
 
 
/*Функции:
•   зарядить в фотоаппарат новую пленку с заданным количеством кадров
•   осуществлять покадровую съемку;
•   извлекать пленку из фотоаппарата;
•   выводить информацию о текущем состоянии фотоаппарата на экран.
*/
main()
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
#include "Header.h"
void main()
{
    setlocale(0,"");
    Photo *a;
    a = new Photo;
    a->ID_Photo=new char[256];
    cout << "Введите название фотоаппарата: "; cin.getline(a->ID_Photo,256);
    cout << "Введите количество кадров в пленке: "; cin >> a->Frame;
    a->Number_Frame = 1;
    int flag = 0;
    while(flag != 5)
    {
        cout << "Введите 1, чтобы зарядить в фотоаппарат новую пленку." << endl 
             << "Введите 2, чтобы сделать покадровую съемку."           << endl
             << "Введите 3, чтобы извлечь пленку."                      << endl
             << "Введите 4, чтобы вывести информацию о состоянии фотоаппарата." << endl
             << "Введите 5, чтобы завершить работу." << endl;
        cin >> flag;
        if (flag == 5)
            break;
        else
            a->Frame_New();
    }
    _getch();
}
0
0x10
2580 / 1759 / 289
Регистрация: 24.11.2012
Сообщений: 4,391
18.09.2014, 18:17 6
Есть реализация метода Frame_New?
1
18.09.2014, 18:17
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
18.09.2014, 18:17

Создание АТД "Стек" на основе массива
&quot;Реализуйте АТД “стек” на основе массива фиксированного размера для элементов,...

Задание по ООП: создание АТД "Массив"
Такое задание на листке бумаги написать ADT массива, то что я принес...

Описать шаблон класса АТД: "Участник очереди на печать издания: фамилия, телефон, количество страниц"
Шаблоны классов с++. Нужно доделать задачу. 1. Описать шаблон класса АТД:...


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

Или воспользуйтесь поиском по форуму:
6
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2018, vBulletin Solutions, Inc.
Рейтинг@Mail.ru