Добро пожаловать! Это — архивная версия форумов на «Хакер.Ru». Она работает в режиме read-only.
 

Объясните лабу с классами

Пользователи, просматривающие топик: none

Зашли как: Guest
Все форумы >> [Компилируемые языки] >> Объясните лабу с классами
Имя
Сообщение << Старые топики   Новые топики >>
Объясните лабу с классами - 2010-04-26 18:20:54.500000   
Promlol

Сообщений: 19
Оценки: 0
Присоединился: 2010-04-04 23:00:01.010000
Создайте класс с именем Rational для выполнения действий с дробями и программу тестирования вашего класса.

Объясните что нужно сделать по порядку, и книжку где про классы почитать можно плиз

Заранее спасибо
Post #: 1
RE: Объясните лабу с классами - 2010-04-26 19:08:09.980000   
katangawise

Сообщений: 23
Оценки: 0
Присоединился: 2010-02-14 16:27:58.953333
Привет. Примерно код такой:
[color=#0000ff][size=2] using[/size][/color][size=2] System; [/size][color=#0000ff][size=2] using[/size][/color][size=2] System.Collections.Generic; [/size][color=#0000ff][size=2] using[/size][/color][size=2] System.Linq; [/size][color=#0000ff][size=2] using[/size][/color][size=2] System.Text; [/size][color=#0000ff][size=2] namespace[/size][/color][size=2] prog { [/size][color=#0000ff][size=2]class[/size][/color][size=2] [/size][color=#2b91af][size=2]Rational [/size][/color][size=2] { [/size][color=#0000ff][size=2]public[/size][/color][size=2] [/size][color=#0000ff][size=2]double[/size][/color][size=2] PlusF([/size][color=#0000ff][size=2]double[/size][/color][size=2] n1, [/size][color=#0000ff][size=2]double[/size][/color][size=2] n2) { [/size][color=#0000ff][size=2]return[/size][/color][size=2] n1 + n2; } [/size][color=#0000ff][size=2]public[/size][/color][size=2] [/size][color=#0000ff][size=2]double[/size][/color][size=2] MinusF([/size][color=#0000ff][size=2]double[/size][/color][size=2] n1, [/size][color=#0000ff][size=2]double[/size][/color][size=2] n2) { [/size][color=#0000ff][size=2]return[/size][/color][size=2] n1 - n2; } [/size][color=#0000ff][size=2]public[/size][/color][size=2] [/size][color=#0000ff][size=2]double[/size][/color][size=2] MultF([/size][color=#0000ff][size=2]double[/size][/color][size=2] n1, [/size][color=#0000ff][size=2]double[/size][/color][size=2] n2) { [/size][color=#0000ff][size=2]return[/size][/color][size=2] n1 * n2; } [/size][color=#0000ff][size=2]public[/size][/color][size=2] [/size][color=#0000ff][size=2]double[/size][/color][size=2] DevideF([/size][color=#0000ff][size=2]double[/size][/color][size=2] n1, [/size][color=#0000ff][size=2]double[/size][/color][size=2] n2) { [/size][color=#0000ff][size=2]return[/size][/color][size=2] n1 / n2; } } [/size][color=#0000ff][size=2]class[/size][/color][size=2] [/size][color=#2b91af][size=2]Program [/size][/color][size=2] { [/size][color=#0000ff][size=2]static[/size][/color][size=2] [/size][color=#0000ff][size=2]void[/size][/color][size=2] Main([/size][color=#0000ff][size=2]string[/size][/color][size=2][] args) { [/size][color=#2b91af][size=2]Rational[/size][/color][size=2] rat = [/size][color=#0000ff][size=2]new[/size][/color][size=2] [/size][color=#2b91af][size=2]Rational[/size][/color][size=2](); [/size][color=#0000ff][size=2]double[/size][/color][size=2] a, b,res=0; [/size][color=#0000ff][size=2]char[/size][/color][size=2] c; [/size][color=#2b91af][size=2]Console[/size][/color][size=2].WriteLine([/size][color=#a31515][size=2]"\nPlease enter first number: "[/size][/color][size=2]); a = [/size][color=#0000ff][size=2]double[/size][/color][size=2].Parse([/size][color=#2b91af][size=2]Console[/size][/color][size=2].ReadLine()); [/size][color=#2b91af][size=2]Console[/size][/color][size=2].WriteLine([/size][color=#a31515][size=2]"Please enter the math methode (+/-*): "[/size][/color][size=2]); c = [/size][color=#0000ff][size=2]char[/size][/color][size=2].Parse([/size][color=#2b91af][size=2]Console[/size][/color][size=2].ReadLine()); [/size][color=#2b91af][size=2]Console[/size][/color][size=2].WriteLine([/size][color=#a31515][size=2]"Please enter second number: "[/size][/color][size=2]); b = [/size][color=#0000ff][size=2]double[/size][/color][size=2].Parse([/size][color=#2b91af][size=2]Console[/size][/color][size=2].ReadLine()); [/size][color=#0000ff][size=2]switch[/size][/color][size=2](c) { [/size][color=#0000ff][size=2]case[/size][/color][size=2] [/size][color=#a31515][size=2]'+'[/size][/color][size=2]: res = rat.PlusF(a, b); [/size][color=#0000ff][size=2]break[/size][/color][size=2]; [/size][color=#0000ff][size=2]case[/size][/color][size=2] [/size][color=#a31515][size=2]'-'[/size][/color][size=2]: res = rat.MinusF(a, b); [/size][color=#0000ff][size=2]break[/size][/color][size=2]; [/size][color=#0000ff][size=2]case[/size][/color][size=2] [/size][color=#a31515][size=2]'/'[/size][/color][size=2]: res = rat.DevideF(a, b); [/size][color=#0000ff][size=2]break[/size][/color][size=2]; [/size][color=#0000ff][size=2]case[/size][/color][size=2] [/size][color=#a31515][size=2]'*'[/size][/color][size=2]: res = rat.MultF(a, b); [/size][color=#0000ff][size=2]break[/size][/color][size=2]; } [/size][color=#2b91af][size=2]Console[/size][/color][size=2].Write([/size][color=#a31515][size=2]"\nIt's equal to : "[/size][/color][size=2]+res.ToString()); [/size][color=#2b91af][size=2]Console[/size][/color][size=2].Read(); } } } [/size]  
Понятно?
Post #: 2
RE: Объясните лабу с классами - 2010-04-26 19:14:00.216666   
_SaZ_

Сообщений: 4329
Оценки: 398
Присоединился: 2008-01-30 02:18:05.553333
очень :)
Post #: 3
RE: Объясните лабу с классами - 2010-04-26 20:09:31.810000   
sbk

Сообщений: 144
Оценки: 0
Присоединился: 2008-12-20 19:01:57.273333
Почитать про классы можно в любой книжке по ООП.
Post #: 4
RE: Объясните лабу с классами - 2010-04-26 23:28:20.593333   
Promlol

Сообщений: 19
Оценки: 0
Присоединился: 2010-04-04 23:00:01.010000
капитан детектед, автора в студию плиз
Post #: 5
RE: Объясните лабу с классами - 2010-04-26 23:53:12.583333   
rgo

Сообщений: 7170
Оценки: 281
Присоединился: 2004-09-25 05:14:25
Вот тебе книжка, где можно почитать про классы: http://www.gigamonkeys.com/book/
Post #: 6
RE: Объясните лабу с классами - 2010-04-27 08:45:22.740000   
katangawise

Сообщений: 23
Оценки: 0
Присоединился: 2010-02-14 16:27:58.953333

Ндааа… Сорри! :)
А теперь, понятно?
&nbsp;
using System;

using System.Collections.Generic;

using System.Linq;

using System.Text;

namespace prog
{
class Rational

{
public double PlusF(double n1, double n2)
{
return n1 + n2;
}
public double MinusF(double n1, double n2)
{
return n1 - n2;
}
public double MultF(double n1, double n2)
{
return n1 * n2;
}
public double DevideF(double n1, double n2)
{
return n1 / n2;
}
}
class Program

{
static void Main(string[] args)
{
Rational rat = new Rational();
double a, b,res=0;
char c;
Console.WriteLine("\nPlease enter first number: ");
a = double.Parse(Console.ReadLine());
Console.WriteLine("Please enter the math methode (+/-*): ");
c = char.Parse(Console.ReadLine());
Console.WriteLine("Please enter second number: ");
b = double.Parse(Console.ReadLine());
switch©
{
case '+':
res = rat.PlusF(a, b);
break;
case '-':
res = rat.MinusF(a, b);
break;
case '/':
res = rat.DevideF(a, b);
break;
case '*':
res = rat.MultF(a, b);
break;
}
Console.Write("\nIt's equal to : "+res.ToString());
Console.Read();
}
}
}
Post #: 7
RE: Объясните лабу с классами - 2010-04-27 11:01:55.576666   
Promlol

Сообщений: 19
Оценки: 0
Присоединился: 2010-04-04 23:00:01.010000
терь, понятно, я думал там посложней будет :) сижу щас дейтла читаю

p.s. спасиб большое
Post #: 8
RE: Объясните лабу с классами - 2010-04-27 12:31:54.156666   
Denaturat

Сообщений: 1741
Оценки: 453
Присоединился: 2008-10-27 20:50:06.380000
quote:

ORIGINAL: katangawise

А теперь, понятно?


а какое отношение этот класс имеет к рациональным числам?
Post #: 9
RE: Объясните лабу с классами - 2010-04-27 16:01:43.510000   
sbk

Сообщений: 144
Оценки: 0
Присоединился: 2008-12-20 19:01:57.273333
Вот самый простой класс для работы с дробями. Язык C#.
class Rational { public double A{get;set;} public double B{get;set;} public Rational(double a,double b) { this.A = a; this.B = b; } public Rational() : this(0,0) { } public static Rational operator +(Rational r1,Rational r2) { return new Rational((r1.A * r2.B) + (r2.A * r1.B), r1.B * r2.B); } public Rational operator *(Rational r1,Rational r2) { return new Rational(r1.A * r2.A, r1.B * r2.B); } public Rational operator -(Rational r1,Rational r2) { return new Rational((r1.A * r2.B) - (r2.A * r1.B), r1.B * r2.B); } public Rational operator /(Rational r1,Rational r2) { return new Rational(r1.A * r2.B, r1.B * r2.A); } }
PS В коде могут быть ошибки.
Post #: 10
RE: Объясните лабу с классами - 2010-04-27 16:13:55.920000   
_SaZ_

Сообщений: 4329
Оценки: 398
Присоединился: 2008-01-30 02:18:05.553333
double замени на какой-нить int ;)

Рациональная дробь - это дробь, у которой числитель и знаменатель - целые числа.
Post #: 11
RE: Объясните лабу с классами - 2010-04-27 16:34:19.040000   
sbk

Сообщений: 144
Оценки: 0
Присоединился: 2008-12-20 19:01:57.273333
Да, но если double заменить на int, то при делении будут неточности.
Post #: 12
RE: Объясните лабу с классами - 2010-04-27 16:52:05.483333   
rgo

Сообщений: 7170
Оценки: 281
Присоединился: 2004-09-25 05:14:25
quote:

ORIGINAL: sbk
Да, но если double заменить на int, то при делении будут неточности.

=)
Это как раз когда ты double используешь, будут неточности. А если использовать int'ы, то все деления будут проводиться с остатком точно.
Да и делить-то особо-то и не надо. Запишем число m/n как (m, n), тогда определения действий:
(m, n) + (p, q) = (m*q + n*p, n*q)
(m, n) * (p, q) = (m*p, n*q)
-(m, n) = (-m, n)

проверка на равенство:
(m, n) == (p, q) <=> (m*q - n*p) == 0


Для удобства стоит оговорить, что знаменатель – натуральное число, то есть число из списка 1, 2, 3, 4…, а числитель – произвольное целое. Ещё удобно "сокращать" дроби, после каждой операции – это позволит в большем числе ситуаций обойтись без переполнения целого, и упростит проверку на равенство. Сокращение – это деление числителя и знаменателя на одно и то же число, которое является делителем и числителя, и знаменателя. Лучше всего, понятное дело, делить на наибольший общий делитель.
Собственно деление понадобиться только для того, чтобы сокращать дроби. Во всех остальных ситуациях вполне можно обойтись умножением и сложением.
Post #: 13
RE: Объясните лабу с классами - 2010-04-27 17:55:02.296666   
_SaZ_

Сообщений: 4329
Оценки: 398
Присоединился: 2008-01-30 02:18:05.553333

quote:

ORIGINAL: rgo

Для удобства стоит оговорить, что знаменатель – натуральное число, то есть число из списка 1, 2, 3, 4…, а числитель – произвольное целое.

Это уже нормализация дроби ;).
Post #: 14
Страниц:  [1]
Все форумы >> [Компилируемые языки] >> Объясните лабу с классами







Связаться:
Вопросы по сайту / xakep@glc.ru

Предупреждение: использование полученных знаний в противозаконных целях преследуется по закону.