Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.50/4: Рейтинг темы: голосов - 4, средняя оценка - 4.50
0 / 0 / 0
Регистрация: 26.12.2016
Сообщений: 24

Аналитика программы с использованием структур в C++

26.12.2016, 19:34. Показов 892. Ответов 12
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Возникла проблема с недопониманием того, как работает данная программа. Также не понятно, как переменные (sA, *psA) задаются после структуры? почему у них не указан тип?
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
#include <iostream>
using namespace std;
struct Alphabet
{
    int i;
    char c;
} sA[5] = {1,'a',2,'b',3,'c',4,'d',5,'e'}, *psA = &sA[0];
int main()
{
    for (int k = 0; k < 4; ++k)
    {
        psA++;
        cout << psA -> c;
    }
}
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
26.12.2016, 19:34
Ответы с готовыми решениями:

Создание программы с использованием собственных функций. Использование массивов и структур
Здравствуйте! Помогите, пожалуйста, решить задачу. Вот текст: Существует 3 категории учеников: отличник, хорошист, двоечник. ...

Задача с использованием структур
Помогите плиз с задачкой. Багаж пассажира характеризуется количеством вещей и общим весом. Ввести информацию о N пассажиров и...

Программирование с использованием динамических структур
З адача о Ханойских башнях. Французский математик Эдуард ...

12
 Аватар для Nishen
1358 / 856 / 366
Регистрация: 26.02.2015
Сообщений: 3,815
26.12.2016, 19:43
Мне нечем на компьютере открыть файл с расширением txt. Скидывайте код сюда.
0
Модератор
Эксперт CЭксперт С++
 Аватар для sourcerer
5288 / 2376 / 342
Регистрация: 20.02.2013
Сообщений: 5,773
Записей в блоге: 20
26.12.2016, 19:47
IgoHz, их тип Alphabet. Это старый, ещё сишный вариант записи. Объявление типа совмещенно с объявлением переменных этого типа. Сейчас в плюсах обычно так уже не пишут1. То есть, сейчас принято разделять объявление класса (class declaration) с объявлением переменных этого типа (объектов).

_______________________
1 см. Стенли Б. Липпман, Жози Лажойе, Барбара Э. Му "Язык программирования C++. Базовый курс" (5-е издание, 2014), стр.112:
Миниатюры
Аналитика программы с использованием структур в C++  
0
0 / 0 / 0
Регистрация: 26.12.2016
Сообщений: 24
26.12.2016, 19:48  [ТС]
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
#include <iostream>
using namespace std;
struct Alphabet
{
    int i;
    char c;
} sA[5] = {1,'a',2,'b',3,'c',4,'d',5,'e'}, *psA = &sA[0];
int main()
{
    for (int k = 0; k < 4; ++k)
    {
        psA++;
        cout << psA -> c;
    }
}
0
Модератор
Эксперт CЭксперт С++
 Аватар для sourcerer
5288 / 2376 / 342
Регистрация: 20.02.2013
Сообщений: 5,773
Записей в блоге: 20
26.12.2016, 20:00
 Комментарий модератора 
IgoHz, пожалуйста, прочитайте правила форума.
Особое внимание обратите на пункт 4.9 (порядок оформления кода).

.

Добавлено через 7 минут
IgoHz, чтобы было понятнее.

Две равнозначные записи:
C++
1
2
3
4
5
6
// 1.
struct Alphabet
{
    int i;
    char c;
} sA[5] = {1,'a',2,'b',3,'c',4,'d',5,'e'}, *psA = &sA[0];
C++
1
2
3
4
5
6
7
8
9
// 2.
struct Alphabet
{
    int i;
    char c;
};
 
Alphabet sA[5] = {1,'a',2,'b',3,'c',4,'d',5,'e'};
Alphabet *psA = &sA[0];
Добавлено через 3 минуты
IgoHz, только инициализация полей структуры у Вас странная. Так поля не инициализируют.
0
0 / 0 / 0
Регистрация: 26.12.2016
Сообщений: 24
26.12.2016, 20:02  [ТС]
А за счёт чего получается вывод, конкретно букв "bcde"? Почему программа начинает выписывать значения через одно, только с третьего элемента массива?
0
Модератор
Эксперт CЭксперт С++
 Аватар для sourcerer
5288 / 2376 / 342
Регистрация: 20.02.2013
Сообщений: 5,773
Записей в блоге: 20
26.12.2016, 20:44
Цитата Сообщение от gru74ik Посмотреть сообщение
Так поля не инициализируют.
IgoHz, а может и инициализируют... хы. Кажется, я ещё чего-то про инициализацию структур не знаю. Забавно.

Добавлено через 12 секунд
Цитата Сообщение от IgoHz Посмотреть сообщение
А за счёт чего получается вывод, конкретно букв "bcde"?
IgoHz, арифметика указателей.

Добавлено через 22 минуты
Цитата Сообщение от IgoHz Посмотреть сообщение
только с третьего элемента массива?
Только со второго элемента. Нумерация массивов идёт с нуля. Второй элемент массива - объект типа Alphabet (другими словами экземпляр класса Alphabet, или ещё можно сказать переменная типа Alphabet). Это переменная (второй элемент массива) имеет два поля - типа int и типа char. Может так (без указателей) понятнее будет:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
#include <iostream>
 
const unsigned int ARR_SIZE = 5;
 
struct Alphabet
{
    int i;
    char c;
} sA[ARR_SIZE] = { 1, 'a', 2, 'b', 3, 'c', 4, 'd', 5, 'e' };
 
int main()
{
    for ( unsigned int k = 0; k < ARR_SIZE; ++k )
    {
        std::cout
            << sA[k].i  // выводим на экран поле i k-того элемента массива
            << "\n"     // переводим курсор на новую строку
            << sA[k].c  // выводим на экран поле c k-того элемента массива
            << "\n\n";  // выводим на экран пустую строку
    }
}
Добавлено через 10 минут
IgoHz, с указателями в Вашем коде так:
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>
 
using namespace std;
 
struct Alphabet
{
    int num;
    char ch;
}
    sA[5] = {1,'a',2,'b',3,'c',4,'d',5,'e'}, // создаём массив типа Alphabet
 
    *psA = &sA[0];  // создаём указатель на тип Alphabet и присваиваем ему
                    // значение (адрес первого элемента нашего массива)
 
int main()
{
    for (int k = 0; k < 4; ++k)
    {
        psA++;  // перенаправляем указатель на следующий элемент массива
        
        cout << psA->ch;    // выводим на экран поле ch того элемента массива,
                            // на который указывает указатель psA
    }
}
0
0 / 0 / 0
Регистрация: 26.12.2016
Сообщений: 24
26.12.2016, 20:45  [ТС]
Спасибо за объяснение синтаксиса, но так и не стало очевидно, за счёт какой операции вывод осуществляется именно со второго элемента массива, если присваивание идёт с первого
0
Модератор
Эксперт CЭксперт С++
 Аватар для sourcerer
5288 / 2376 / 342
Регистрация: 20.02.2013
Сообщений: 5,773
Записей в блоге: 20
26.12.2016, 20:45
IgoHz, за счёт psA++
0
0 / 0 / 0
Регистрация: 26.12.2016
Сообщений: 24
26.12.2016, 20:49  [ТС]
То есть, если поставить
C++
1
psA++;
после
C++
1
cout << psA -> ch;
, то в консоли отобразится первый элемент включительно, на сколько я понял.
0
Модератор
Эксперт CЭксперт С++
 Аватар для sourcerer
5288 / 2376 / 342
Регистрация: 20.02.2013
Сообщений: 5,773
Записей в блоге: 20
26.12.2016, 20:51
IgoHz, сравните такой вариант:
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>
 
using namespace std;
 
struct Alphabet
{
    int num;
    char ch;
}
    sA[5] = {1,'a',2,'b',3,'c',4,'d',5,'e'}, // создаём массив типа Alphabet
 
    *psA = &sA[0];  // создаём указатель на тип Alphabet и присваеваем ему
                    // значение (адрес первого элемента нашего массива)
 
int main()
{
    for (int k = 0; k < 4; ++k)
    {
        cout << psA->ch;    // выводим на экран поле ch того элемента массива,
                            // на который указывает указатель psA
 
        psA++;  // перенаправляем указатель на следующий элемент массива
    }
}
0
0 / 0 / 0
Регистрация: 26.12.2016
Сообщений: 24
26.12.2016, 20:53  [ТС]
Всё, понял! Спасибо вам за раскрытие всех непоняток в данном коде.
0
Модератор
Эксперт CЭксперт С++
 Аватар для sourcerer
5288 / 2376 / 342
Регистрация: 20.02.2013
Сообщений: 5,773
Записей в блоге: 20
26.12.2016, 20:56
IgoHz, а чтобы показать поля ch всех элементов просто отразим это в количестве витков цикла (не 4 витка, а 5):
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>
 
using namespace std;
 
struct Alphabet
{
    int num;
    char ch;
}
    sA[5] = {1,'a',2,'b',3,'c',4,'d',5,'e'}, // создаём массив типа Alphabet
 
    *psA = &sA[0];  // создаём указатель на тип Alphabet и присваеваем ему
                    // значение (адрес первого элемента нашего массива)
 
int main()
{
    for (int k = 0; k < 5; ++k) // не 4 витка, а 5
    {
        cout << psA->ch;    // выводим на экран поле ch того элемента массива,
                            // на который указывает указатель psA
 
        psA++;  // перенаправляем указатель на следующий элемент массива
    }
}
Добавлено через 2 минуты
Цитата Сообщение от IgoHz Посмотреть сообщение
то в консоли отобразится первый элемент включительно
Да, именно.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
26.12.2016, 20:56
Помогаю со студенческими работами здесь

Разработка приложений с использованием структур
Задание: Дан массив книг: название, тип, автор, количество страниц, страна- родина автора. Организовать поиск по автору, по типу....

Вычислить выражение с использованием структур
a=3+e^y-1/1+x^2 |y - tg z|; Редактор формул внизу страницы a=3+{e}^{y}-\frac{1.}{1+{x}^{2}}\left|y-tgz \right| Добавлено через 37...

Обработка массивов структур с использованием контейнеров
Вариант 13 Написать программу, которая содержит текущую информацию о книгах в библиотеке. Сведения о книгах включают: □ номер...

Сохранения Информации с использованием структур и массивов
Здравствуйте, дорогие пользователи! Имею вот простую задачу... Сохранения данной информации: &quot;фамилия, инициалы, год рождения,...

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


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

Или воспользуйтесь поиском по форуму:
13
Ответ Создать тему
Новые блоги и статьи
SDL3 для Desktop (MinGW): Создаём пустое окно с нуля для 2D-графики на SDL3, Си и C++
8Observer8 10.03.2026
Содержание блога Финальные проекты на Си и на C++: hello-sdl3-c. zip hello-sdl3-cpp. zip Результат:
Установка CMake и MinGW 13.1 для сборки С и C++ приложений из консоли и из Qt Creator в EXE
8Observer8 10.03.2026
Содержание блога MinGW - это коллекция инструментов для сборки приложений в EXE. CMake - это система сборки приложений. Здесь описаны базовые шаги для старта программирования с помощью CMake и. . .
Как дизайн сайта влияет на конверсию: 7 решений, которые реально повышают заявки
Neotwalker 08.03.2026
Многие до сих пор воспринимают дизайн сайта как “красивую оболочку”. На практике всё иначе: дизайн напрямую влияет на то, оставит человек заявку или уйдёт через несколько секунд. Даже если у вас. . .
Модульная разработка через nuget packages
DevAlt 07.03.2026
Сложившийся в . Net-среде способ разработки чаще всего предполагает монорепозиторий в котором находятся все исходники. При создании нового решения, мы просто добавляем нужные проекты и имеем. . .
Модульный подход на примере F#
DevAlt 06.03.2026
В блоге дяди Боба наткнулся на такое определение: В этой книге («Подход, основанный на вариантах использования») Ивар утверждает, что архитектура программного обеспечения — это структуры,. . .
Управление камерой с помощью скрипта OrbitControls.js на Three.js: Вращение, зум и панорамирование
8Observer8 05.03.2026
Содержание блога Финальная демка в браузере работает на Desktop и мобильных браузерах. Итоговый код: orbit-controls-threejs-js. zip. Сканируйте QR-код на мобильном. Вращайте камеру одним пальцем,. . .
SDL3 для Web (WebAssembly): Синхронизация спрайтов SDL3 и тел Box2D
8Observer8 04.03.2026
Содержание блога Финальная демка в браузере. Итоговый код: finish-sync-physics-sprites-sdl3-c. zip На первой гифке отладочные линии отключены, а на второй включены:. . .
SDL3 для Web (WebAssembly): Идентификация объектов на Box2D v3 - использование userData и событий коллизий
8Observer8 02.03.2026
Содержание блога Финальная демка в браузере. Итоговый код: finish-collision-events-sdl3-c. zip Сканируйте QR-код на мобильном и вы увидите, что появится джойстик для управления главным героем. . . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru