Страница 1 из 1

домашняя работа

Добавлено: Пн окт 30, 2006 19:05
[geniuz]
паспортные данные

поля: имя фамилия группа крови дата рождения пол
методы: ввод вывод операция по перемене пола вычисление возраста

кто может черкните как... :)
предмет POO
язык Си

Добавлено: Пн окт 30, 2006 19:48
sadman
ну как, просто.
Создаешь структуру

Код: Выделить всё

struct Passport
{
...
};
Внутри структуры создаешь нужные тебе поля, примерно так

Код: Выделить всё

...
char Gender;
...
Далее методы:

Код: Выделить всё

...
void Show( string S );
...
};// окончание объявления структуры

void Passport::Show( string S )
{...}
Что-то вроде того.
зы а что такое POO?

Добавлено: Пн окт 30, 2006 19:54
[geniuz]
sadman,

Объектно ориентированное програмирование

а это покатит?

http://risik.city.tomsk.net/oop/l06.htm

Добавлено: Пн окт 30, 2006 19:56
webstudio
Адрест лабораторной по Ораклу у кого-то есть?

Добавлено: Пн окт 30, 2006 20:06
sadman
[off]ну, если Объектно ориентированное програмирование, то оно чаще сокращается как OOP (Object Oriented Programming)[/off]
Ну, ты говорил о языке С, а там С++. Там создаются классы, производится инкапсуляция. Я думаю вы этого еще не проходили ;)
Тем более что у тебя в задании просят методы и поля, то-есть члены структуры(одной) или класса(одного).
И, как я понял из задания, там нужна только одна структура/класс.
зы но идею с перечислимым типом Sex мона позаимствовать ;)

Добавлено: Ср ноя 01, 2006 09:51
Realist
Правельно, пол не должен быть булевым, а то есть люди с нарушеной гинетикой и не М, и не Ж. Главное, что человек всегда может решить сменить его.

Добавлено: Ср ноя 01, 2006 11:14
vivk
Realist писал(а):Правельно, пол не должен быть булевым, а то есть люди с нарушеной гинетикой и не М, и не Ж. Главное, что человек всегда может решить сменить его.
<a href=https://bugaga.ru target=_blank>лол</a> ))

Добавлено: Чт ноя 16, 2006 11:03
[geniuz]
# include <stdio.h>
# include <conio.h>

main()
{
struct Passport
{
char name[10];
char sec name[20];
char pol[2];
int gruppa krovi[2];
int int date (int yy, int mm, int dd)
} Passport

clrscr();
//----------------------------------------------------------Zapolnenie strukturi-----------
for(i=0;i<KOL;i++)
{
printf("\n Vvedite name (ne bolee 10 simvolov!!!):");
for(;;)
{
for(j=0;j<sizeof(passport.name)-1;j++)
{
per=getch();
if(per==13)
break;
if((per>='A' && per<='Z') || (per>='a' && per<='z'))
{
passport.name[j]=per;
putch(per);
}
else
{
j--;
continue;
}
}
passportt.name[j]=0;
if(passport.name[0]==0)
continue;
if(per==13)
break;
else
for(;(per=getch())!=13;)
break;
}

так?

Добавлено: Пт ноя 17, 2006 11:24
dmitriid
во-первых, что такое passport, и где он задается?

во-вторых, вы <iostream> проходили?

Эхх. Давно я на С++ не писал. Сейчас пишу по памяти. Должно сработать так:

Код: Выделить всё

#include <iostream>

using namespace std;

// все остается как есть, но данные считываем так:

cout << endl << "Введите следующие данные: имя, фамилию, пол (М/Ж), группу крови, дату рождения";
cin >> passport[i].name >> passport[i].sec_name >> passport[i].pol >> passport[i].gruppa_krovi >> passport[i].date;

// ну или по порядку:
// cout << "Введите следующие данные:" 
// cout << endl << "имя: ";
// cin >> passport[i].name;
// cout << endl << "фамилию: ";
// cin >> passport[i].sec_name;
// ну и так далее
И еще. Наименования переменных надо писать или только на английском или только на русском. Потому что этот код кто-то да будет читать, а там тааакая мешанина...

Добавлено: Пт ноя 17, 2006 16:52
sadman
dmitriid,
а нафига ему твои cout'Ы? :? раз пишет в стдио - знаит так надо, так задали!

Добавлено: Пт ноя 17, 2006 17:15
dmitriid
sadman писал(а):dmitriid,
а нафига ему твои cout'Ы? :? раз пишет в стдио - знаит так надо, так задали!
Не обязательно :)

printf() и getch() сотоварищи - это зло, однозначно :)

Добавлено: Пт ноя 17, 2006 18:43
sadman
printf() и getch() сотоварищи - это зло
а вот отсюда по-подробней

Добавлено: Сб ноя 18, 2006 10:51
dmitriid
sadman писал(а):
printf() и getch() сотоварищи - это зло
а вот отсюда по-подробней
Ну это я провокационно заявил, конечно. Но.

(Все примеры не тестировались. С++ я в руки давно не брал, могут быть ошибки)

printf() и getch() - это наследие С. В С++ удобнее работать с потоками и (в простейших вариантах) с cin и cout. Например, с консолью и с файлами можно работать одинаково:

Код: Выделить всё

// Консоль:
int i;
float fl;
char temp[100];

std::cin.getline(temp, 100);
fl=strtof(temp,0);

std::cin.getline(temp, 100);
i=strtol(temp,0,10);


// Файл:
std::ifstream someVarName("data.txt");
float fl;
char temp[100];

someVarName.getline(temp, 100);
fl=strtof(temp);

int i;
someVarName >> i;

Ну и самое главное - это перегрузка операторов << и >>:

Код: Выделить всё


#include <iostream>

using namespace std;

class Passport
{
	friend ostream& operator<<(ostream& output, const Passport& p);
	friend ostream& operator>>(istream& input, Passport& p);

private:
	char _name[100], 
	     _surname[100];
	int _birthday;       // в формате 19802910 для 29.10.1980
	char _bloodType[3];  //чтобы включить и резус, то есть максимум "AB+"
};

ostream& operator<<(ostream& output, const Passport& p)
{
	output << "Name-surname: " << p._name << p._surname << endl;
	output << "Birthday: " << p._birthday << endl;
	output << "Blood type: " << p._bloodType << endl << endl;
	
	return output;
}

istream& operator>>(istream& input, Passport& p)
{
	// Ввод по порядку: имя, фамилия, дата рождения, группа крови
	
	input >> p._name >> p._surname >> p._birthday >> p._bloodType;
	
	return input;
}

void main()
{
	personCount = 10;
	
	Passport data[personCount];
	
	for(int i = 0; i < personCount; i++)
	{
		cout << "Введите имя, фамилию, дату рождения в формате yyyymmdd, групу крови: "
		cin >> data[i];
		cout << endl << endl;
	}
	
	cout << "Вы ввели следующие данные: " << endl << endl;
	for(int i = 0; i < personCount; i++)
	{
		cout << data[i];
	}
}
// исправлено минуту спустя. for(int i...) конечно. Работа с динамически типизированными языками расслабляет однако

Добавлено: Ср ноя 29, 2006 10:19
[geniuz]
dmitriid,
это вся прога??? а конструкторы и диструкторы тут есть?

Добавлено: Ср ноя 29, 2006 10:55
dmitriid
[geniuz] писал(а):dmitriid,
это вся прога??? а конструкторы и диструкторы тут есть?
По идее, этого достаточно, потому что С++ автоматом генерит конструктор, конструктор копирования и деструктор для класса. Но! В данном случае надо сделать, как минимум, конструктор, который будет выделять память для массиово символов (char _name[100], _surname[100]; и т.п.), насколько я помню.

А в остальном - да, это вся программа. Но, повторюсь, я дааавно с С++ не игрался :) Мог чего-нибудь напутать :shy:

Добавлено: Вт дек 05, 2006 12:50
Lichii Anatoli
мля. вот пипец. каждому конструктору по деструктору! :D

мы начинали с знакомится с основами OOP в Java. по-моему это проще!

Добавлено: Вт дек 05, 2006 12:55
dmitriid
Lichii Anatoli писал(а):мля. вот пипец. каждому конструктору по деструктору! :D
:lol:
мы начинали с знакомится с основами OOP в Java. по-моему это проще!
Кстати, да. С++ слишком многопарадигменный язык, да в нем еще и ногу сломать можно. ООП лучше начинать учить с Java/C#

Добавлено: Вт дек 05, 2006 13:21
Lichii Anatoli
dmitriid писал(а):
Кстати, да. С++ слишком многопарадигменный язык, да в нем еще и ногу сломать можно. ООП лучше начинать учить с Java/C#
читал как-то man mplayer-а. так его создатель очень не хорошо отзывался о C++. :)

Добавлено: Вт дек 05, 2006 13:47
dmitriid
Lichii Anatoli писал(а):
читал как-то man mplayer-а. так его создатель очень не хорошо отзывался о C++. :)
Для того, чтобы писать на С++, не ломая ноги-руки-голову, надо ооочень долго с ним возиться :)