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

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

Войти
Регистрация
Восстановить пароль
 
 
Рейтинг: Рейтинг темы: голосов - 19, средняя оценка - 4.58
Hammer-On
0 / 0 / 0
Регистрация: 10.11.2012
Сообщений: 41
#1

Передача структуры по ссылке - C++

27.11.2012, 22:48. Просмотров 2965. Ответов 18
Метки нет (Все метки)

Здравствуйте. Нужно использовать передачу структуры по ссылке(или по указателю). Объясните пожалуйста как это делать и , если можно, как это можно безболезненно запихать в мой код


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
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
#include <stdio.h>
#include <iostream.h>
#include <time.h>
#include <string.h>
#include <conio.h>
#include <iomanip.h>
 
int kolvo_reisov();
int kolvoreisov(int);
void vvod_raspisaniya();
void zapros();
void vivod();
void povtor_zaprosa();
void body_of_main();
 
//char* v;
int y;
tm time1[100];
tm time2[100];
tm time3[100];
struct strc{
int a[100];//номер
char b[100];//тип автобуса
char c[100];//пункт назначения
}bus[100];
int f,i,j,h,k;
 
int kolvo_reisov()
{
cout << "vvedite kol-vo reisov"<<endl;
cin >> f;
return f;
}
 
int kolvoreisov(int f)
{
f = k;
return k;
}
 
void vvod_raspisaniya()
{
error:
kolvo_reisov();
 
for (i=0; i < f; i++)
{
bus[i].a[i] = 1+i;
cout << "vvedite tip avtobusa"<<endl;
cin >> bus[i].b;
cout << "vvedite punkt naznacheniya"<<endl;
cin >> bus[i].c;
cout << "vvedite vremya otpravleniya(hours(space)minutes)"<<endl;
cin >> time1[i].tm_hour >> time1[i].tm_min;
cout << "vvedite vremya pribitiya(hours(space)minutes)"<<endl;
cin >> time2[i].tm_hour >> time2[i].tm_min;
}
 
for (i=0; i < f; i++)
{
    if( time1[i].tm_hour>23)
    {   cout << "vvedite raspisaniye pravilno" << endl;
        goto error;
    }
        if(time1[i].tm_min>59)
    {   cout << "vvedite raspisaniye pravilno" << endl;
        goto error;
    }
            if(time2[i].tm_hour>23)
    {   cout << "vvedite raspisaniye pravilno" << endl;
        goto error;
    }
                if(time2[i].tm_min>59)
    {   cout << "vvedite raspisaniye pravilno" << endl;
        goto error;
    }
    
    if(time2[i].tm_hour < time1[i].tm_hour)
    {
        cout << "vvedite raspisaniye pravilno" << endl;
    goto error;
    }
    else
    {
        if(time2[i].tm_hour == time1[i].tm_hour)
        {
        if(time2[i].tm_min <= time1[i].tm_min)
        {
            cout << "vvedite raspisaniye pravilno" << endl;
            goto error; 
        }
    }
}
}
}
 
void zapros()
{
errorr:
cout << "vvedite interesyUshee vas vremya pribitiya(hours(space)minutes)"<<endl;
cin >> time3[1].tm_hour >> time3[1].tm_min;
 
if(time1[1].tm_hour> 23)
    {   cout << "vvedite vremya pravilno" << endl;
        goto errorr;
    }
if(time1[1].tm_min> 59)
    {   cout << "vvedite vremya pravilno" << endl;
        goto errorr;
    }
 
}
 
void vivod()
{
kolvoreisov(f);
j=0;
do
{
    if(time3[1].tm_hour < time2[j].tm_hour)
    {
    cout << bus[j].a[j] << ". " << bus[j].b << " " << bus[j].c << " " << time1[j].tm_hour <<"."<< time1[j].tm_min <<" "<<time2[j].tm_hour<<"." <<time2[j].tm_min<<endl;
    }
    else
    {
        if(time3[1].tm_hour == time2[j].tm_hour)
        {
        if(time3[1].tm_min <= time2[j].tm_min)
        {
                cout << bus[j].a[j] << ". " << bus[j].b << " " << bus[j].c << " "  << time1[j].tm_hour <<"."<< time1[j].tm_min <<" "<<time2[j].tm_hour<<"." <<time2[j].tm_min<<endl;
        }
    }
}
    j++;
}
while(j<f);
 
}
 
void povtor_zaprosa()
{
 
cout << "zhelayete li vi povtorit zapros(1-yes,2-no)?" << endl;
cin >> y;
if(y==1)
{
zapros();
vivod();    
}
if (y==2) getch();
cout<<"\n";
 
}
 
void body_of_main()
{
vvod_raspisaniya();
zapros();
vivod();
povtor_zaprosa();
}
 
int main ()
{
 
body_of_main();
//v = asctime(&time1[1]) ;
 
return 0;
}
условие задачи на всякий случай:
"В справочной автовокзала хранится расписание движения автобусов.
Для каждого рейса указаны его номер, тип автобуса, пункт назначения, время
отправления и прибытия. Вывести информацию о рейсах, которыми можно
воспользоваться для прибытия в пункт назначения раньше заданного времени."
Использавать функции и передачу структыры по ссылке или указателюю
0
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
27.11.2012, 22:48
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Передача структуры по ссылке (C++):

Передача объекта структуры по ссылке - C++
Здравствуйте. Нужно использовать передачу структуры по ссылке(или по указателю). Объясните пожалуйста как это делать и , если можно, как...

Передача по ссылке - C++
В учебнике написано, что можно использовать функцию с левой стороны операции присваивания, если она возвращает ссылку. Например, так: ...

Передача по ссылке - C++
Здравствуйте. 1.typedef struct { MATRIXX_LENTA&lt;double&gt;* MATR; //Ленточная матрица } DATA_LENTA, *PDATA_LENTA; DWORD WINAPI...

Передача по ссылке - C++
С помощью функции rand() округлить значение double и передать его по ссылке.

Передача параметров по ссылке - C++
Стоит ли передавать все параметры (кроме скалярных и указателей) по сслыке? Т.е. вместо void doSomething(const int _count, const...

Передача вектора по ссылке - C++
Делаю задание Страуструпа на шаблоны, но столкнулся с тем что передавая вектор по ссылке он передаётся не по ссылке (такая вот тавтология)....

Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Wolkodav
604 / 457 / 32
Регистрация: 18.09.2012
Сообщений: 1,685
27.11.2012, 22:53 #2
А структура, описание её где?

Добавлено через 37 секунд
Не вижу слово
C++
1
struct
1
v.a.l.i.d
27.11.2012, 22:58
  #3

Не по теме:

Цитата Сообщение от Wolkodav Посмотреть сообщение
А структура, описание её где?
В 21 строчке затаилось

1
Hammer-On
0 / 0 / 0
Регистрация: 10.11.2012
Сообщений: 41
27.11.2012, 22:59  [ТС] #4
строка 21
0
Wolkodav
604 / 457 / 32
Регистрация: 18.09.2012
Сообщений: 1,685
27.11.2012, 23:01 #5
Ой блин, надо же было так заныкать, тьфу.
1
Hammer-On
0 / 0 / 0
Регистрация: 10.11.2012
Сообщений: 41
27.11.2012, 23:02  [ТС] #6
прости, я чайник)
0
Croessmah
Эксперт CЭксперт С++
13226 / 7498 / 845
Регистрация: 27.09.2012
Сообщений: 18,417
Записей в блоге: 3
Завершенные тесты: 1
27.11.2012, 23:12 #7
Собственно, в какую функцию требуется передать переменную? И какую переменную
1
Hammer-On
0 / 0 / 0
Регистрация: 10.11.2012
Сообщений: 41
27.11.2012, 23:20  [ТС] #8
передать нужно структуру
C++
1
struct strc
в функцию ввода (код и так работает нужно просто сделать чтобы было как просит препод)
0
Wolkodav
604 / 457 / 32
Регистрация: 18.09.2012
Сообщений: 1,685
27.11.2012, 23:21 #9
Блин я лох.
короче
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
void SortBus(strc* A,int n)
{
}
 
void SortBus1(strc& A,int n)
{
}
 
void main()
{
strc A,
strc* B;
strc& G;
strc F[10];
int n=0;
SortBus(&A,n);
SortBus(B,n);
SortBus(*G,n);
SortBus(F,n);
SortBus1(A,n);
SortBus1(*B,n);
SortBus1(G,n);
}
И на будущее, сигнатуры функций, описание классов и структур, в заголовочный файл, реализация в .срр
И глобальные переменные по минимуму использовать!! Очень вредно.

Добавлено через 39 секунд
Вопросы)
1
Croessmah
Эксперт CЭксперт С++
13226 / 7498 / 845
Регистрация: 27.09.2012
Сообщений: 18,417
Записей в блоге: 3
Завершенные тесты: 1
27.11.2012, 23:24 #10
Цитата Сообщение от Hammer-On Посмотреть сообщение
передать нужно структуру
может всё-таки переменную?
1
Hammer-On
0 / 0 / 0
Регистрация: 10.11.2012
Сообщений: 41
27.11.2012, 23:24  [ТС] #11
спасибо, сейчас разберусь что к чему)
0
kravam
быдлокодер
1695 / 882 / 45
Регистрация: 04.06.2008
Сообщений: 5,459
27.11.2012, 23:24 #12
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
#include <stdio.h>
 
 
//Это вот структура
struct str {
 int x;
 int y;
};
 
//Это функция, принимающая ссылку на такую структуру и изменяющие её члены   
void f (str&);                                                             //
                                                                           //
                                                                           //
int main () {                                                              //
                                                                           //
  //Пока всё должно быть понятно, объявили переменную типа str и присвоили её
  //членам определённые значения.                                          //
  str str_;                                                                //
  str_.x= 10; str_.y= 20;                                                  //
  //ВЫведем значения str_ на экран                                         //
  printf ("str_x= %d      str_.y= %d\n", str_.x, str_.y);                  //
                                                                           //
  //теперь вызываем функцию f ()                                             
  f (str_);                                                                //
  //НУ вот, в функцию f передан УКАЗАТЕЛЬ на str_, то есть АДРЕС последней   
  //А кажется- будто сама переменная str_, но ни фига подобного            //
                                                                           //
  //Осталось посмотрет, изменились ли сами значения или нет:               //
  printf ("str_x= %d      str_.y= %d\n", str_.x, str_.y);                  //
  //Видим, что изменились                                                  //
  //Это говорит о том, что передача была ПО ССЫЛКЕ , то есть передавался     
  //только адрес str_, а казалось, что передаётся самао str_; это          //
  //я бы сказал, упрощение синтаксиса достигнуто было за счёт применения   ссылки
                                                                           //
  getchar ();                                                              //
  return 0;                                                                //
}                                                                          //
//                                                                           
 
 
                       //++++++++++++++++++++++++
                       //реализация функции f () 
                       //++++++++++++++++++++++++
 
void f (str& str_) {
 //Работает со структурой, как будто она передана не по ссылке, а по значению
 //то есть синтаксис обычный                                               //
 str_.x= 100;                                                              //
 str_.y= 200;                                                              //
 //А если бы передача была с помощью указателя, вот так: f (&str); тогда     
 //синтаксис был бы таким: str_->x; str_->y                                  
 //Вот и всё                                                                 
}
1
Hammer-On
0 / 0 / 0
Регистрация: 10.11.2012
Сообщений: 41
27.11.2012, 23:27  [ТС] #13
так, это ты мне в коде показал 3 способа как делать?)
0
Wolkodav
604 / 457 / 32
Регистрация: 18.09.2012
Сообщений: 1,685
27.11.2012, 23:28 #14
Да, просто если разбираться с указателями и ссылками, то все и сразу, иначе смысла нету.
1
Hammer-On
0 / 0 / 0
Регистрация: 10.11.2012
Сообщений: 41
27.11.2012, 23:28  [ТС] #15
оу, и тебе спасибо) даже понятнее становится)
0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
27.11.2012, 23:28
Привет! Вот еще темы с ответами:

Передача параметров по ссылке - C++
У кого есть рабочий вариант сего чуда ? (К примеру,функции квадратного корня).В учебнике не работает.

Передача значения по ссылке - C++
1. Объявите (в отельном заголовочном файле) и реализуйте (в другом файле) процедуры (они не возвращают значений!) согласно варианту. 2....

Передача по ссылке, различие - C++
В чем разница случаев?: 1. void func(int&amp; a); 2. void func(int &amp;a); и аналогично: 1.void func(vector &lt;float&gt; &amp;a); 2.void...

Передача параметров по ссылке - C++
Вот задание: С клавиатуры вводится число, передается в вызываемую функцию, в ней найти сумму делителей и их число. Результат работы...


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

Или воспользуйтесь поиском по форуму:
Yandex
Объявления
27.11.2012, 23:28
Ответ Создать тему
Опции темы

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