Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 18.01.2010, 19:15   #1
-ushёl-
Форумчанин
 
Аватар для -ushёl-
 
Регистрация: 04.02.2009
Сообщений: 141
Вопрос С++,функция с аргументом адресом структуры

Доброго времени суток!=) Подскажите плз по заданию или подкорректируйте моё решение=)
Задача.Имеется структура
struct box
{
char maker[40];
float height;
float width;
float length;
float volume;
};
a. Напишите функцию,принимающую структуру box по значению и отображающую все её члены.
б. Напишите функцию,принимающую адрес структуры box и устанавливающую значение члена volume равным произведению остальных трёх членов.
в. Напишите простую программу,использующую эти две функции.
#include <cstdlib>
#include <iostream>
struct box
{
char maker[40];//proizvoditel,visota,shirina,dlinna, objem"
float height;
float width;
float length;
float volume;
};
void show_box(box mac);
void proizv_box(box* hwl);
using namespace std;

int main(int argc, char *argv[])
{
using namespace std;
box model1={"Kingston KTD-INP",
10,
2,
3,
7
};
proizv_box(&model1);
show_box(model1);
system("PAUSE");
return EXIT_SUCCESS;
}
void show_box(const box mac)
{
using namespace std;
cout<<mac.maker<<"\n"<<mac.height<< "\n"
<<mac.width<<"\n"<<mac.length<<"\n" <<mac.volume<<"\n";
}
void proizv_box(box* hwl)
{
using namespace std;
hwl->volume=hwl->height*hwl->width*hwl->length;
}
Пробовал ставить цикл while для ввода значений структуры,но не могу его прервать,как это возможно сделать?=(
-ushёl- вне форума Ответить с цитированием
Старый 18.01.2010, 19:20   #2
Namolem
Oo
Форумчанин
 
Аватар для Namolem
 
Регистрация: 10.10.2009
Сообщений: 350
По умолчанию

using namespace std; достаточно написать 1 раз, после инклюдов

Цитата:
Пробовал ставить цикл while для ввода значений структуры,но не могу его прервать,как это возможно сделать?=(
покажите как пробовали. Цикл можно использовать для создания массива структур, но в задании такого нет
Namolem вне форума Ответить с цитированием
Старый 18.01.2010, 19:37   #3
-ushёl-
Форумчанин
 
Аватар для -ushёl-
 
Регистрация: 04.02.2009
Сообщений: 141
По умолчанию

Вы считаете правильно сделал,по заданию?
А цикл пробовал примерно вот так:
box model1;
cout<<"vvedite parametry: \n";
while(cin>>model1.maker>>model1.hei ght
>>model1.width>>model1.length
>>model1.volume)
{
proizv_box(&model1);
show_box(model1);
}

Последний раз редактировалось -ushёl-; 18.01.2010 в 19:40.
-ushёl- вне форума Ответить с цитированием
Старый 18.01.2010, 20:02   #4
Namolem
Oo
Форумчанин
 
Аватар для Namolem
 
Регистрация: 10.10.2009
Сообщений: 350
По умолчанию

цикл while(cin>>model1.maker) неверен, потому что, насколько я знаю, cin>>model1.maker возвращает ссылку на поток ввода, а он не будет равен нулю. Лучше сделать так
Код:
do{
	cin	>>model1.maker>>model1.height
		>>model1.width>>model1.length
		>>model1.volume;
	proizv_box(&model1);
	show_box(model1);
} while (model1.heigth);
цикл будет продолжаться до тех пор, пока значение высоты не равно 0
Namolem вне форума Ответить с цитированием
Старый 18.01.2010, 20:10   #5
val_nnm
Форумчанин
 
Регистрация: 18.10.2009
Сообщений: 185
По умолчанию

и ещё вы передаёте параметр как const.
дело в том что const это нечто среднее между передачей параметра по значению и передачей параметра по адресу.
Вернее в памяти он передаётся па адресу но в теле функции просто запрещено изменять его значение.

Поэтому по заданию наверно лучше будет без const.
На С# пишу лучше чем на русском.
"У меня правильнописание хромает. Оно хорошее, но почему-то хромает."
val_nnm вне форума Ответить с цитированием
Старый 18.01.2010, 20:16   #6
-ushёl-
Форумчанин
 
Аватар для -ushёl-
 
Регистрация: 04.02.2009
Сообщений: 141
По умолчанию

ок! А как его прервать до ввода высоты?До ввода высоты идёт ведь ввод имени производителя.Цикл while прерывается если дважды нажать любой буквенный символ,нужно как то прерывать цикл на чтении maker'a... Но как,вот в чём вопрос?
-ushёl- вне форума Ответить с цитированием
Старый 18.01.2010, 20:28   #7
val_nnm
Форумчанин
 
Регистрация: 18.10.2009
Сообщений: 185
По умолчанию

сорь похже насчёт const я немного соврал. Давно учил теорию по C++. Хотя думаю всёже лучше без него.

А прервать цикл можно думаю так

Код:
do{
	cin	>>model1.maker
           if (model1.maker[0]==0) break;
           cin        >>model1.height
		>>model1.width>>model1.length
		>>model1.volume;
	proizv_box(&model1);
	show_box(model1);
} while (model1.heigth);
думаю должно сработать. (лень проверять и компелировать) Проверь сам если что тогда исправим.
На С# пишу лучше чем на русском.
"У меня правильнописание хромает. Оно хорошее, но почему-то хромает."
val_nnm вне форума Ответить с цитированием
Старый 19.01.2010, 19:09   #8
-ushёl-
Форумчанин
 
Аватар для -ushёl-
 
Регистрация: 04.02.2009
Сообщений: 141
По умолчанию

спасибо за помощь!
-ushёl- вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
проблема с адресом внешней ссылки Bezdar Microsoft Office Excel 0 06.04.2009 12:11
помогите с адресом пожалуйста rudolfe Assembler - Ассемблер (FASM, MASM, WASM, NASM, GoASM, Gas, RosAsm, HLA) и не рекомендуем TASM 3 07.03.2009 13:19
Проблема с адресом файла Геля Общие вопросы Delphi 8 20.04.2007 20:48
Помогите с IP-адресом! gluk666 Работа с сетью в Delphi 1 25.02.2007 09:28