Я вот написал программу для расчёта квадратного уравнения. Задумал её улучшить и сделал медленный вывод строки (как печатают на машинке). Когда я её писал на qbasic'е там была удобная комманда gosub, которая работала как goto, только позволяла вурнуться.
Подскажите, а как это можно сделать на с#.
Вот текст программы:
Здравствуйте, BCoder, Вы писали:
BC>Я вот написал программу для расчёта квадратного уравнения. Задумал её улучшить и сделал медленный вывод строки (как печатают на машинке). Когда я её писал на qbasic'е там была удобная комманда gosub, которая работала как goto, только позволяла вурнуться.
Вместо GOSUB уже давно используется вызов методов. (С передачей параметрами и прочими прелестями)
Здравствуйте, BCoder, Вы писали:
BC>Привет, программисты !
BC>Я вот написал программу для расчёта квадратного уравнения. Задумал её улучшить и сделал медленный вывод строки (как печатают на машинке). Когда я её писал на qbasic'е там была удобная комманда gosub, которая работала как goto, только позволяла вурнуться. BC>Подскажите, а как это можно сделать на с#. BC>Вот текст программы:
BC>Спасибо. BC>Иван
Это такой прикол? Хотя помнится на первом курсе наш пепод так любил goto,что потом еле-еле отучился
Вот работающий пример (единсвенно, это надо добавить try для FormatException перед parse для float, на случай, если введенная строка не является числом):
using System;
using System.IO;
using System.Threading;
namespace MegaRulezzz
{
class Class1
{
private const int _timeOut=50;
private static void Write(string msg)
{
foreach(char item in msg)
{
Console.Write(item);
Thread.Sleep(_timeOut);
}
}
private static bool _solve(double a, double b, double c, out double x1, out double x2)
{
x1=x2=0;
double desc = b*b-4*a*c;
if(desc<0)
return false;
x1 = -b+Math.Sqrt(desc)/(2*a);
x2= -b-Math.Sqrt(desc)/(2*a);
return true;
}
static double _readdouble()
{
return double.Parse(Console.ReadLine());
}
static char _readChar()
{
return char.Parse(Console.ReadLine());
}
static void Main(string[] args)
{
double x1=0,x2=0;
char chr;
bool solve;
bool doC = true;
Write("Hellow, dummy user !\n");
Write("I am a Great Programm !\n");
Write("My Great Mission is to solve quadratic equation !\n");
Write("New economy algorithm for memory using !!!\n");
while(doC)
{
Write("Please, dummy user, insert a,b,c koefficients :\n");
solve =_solve(_readdouble(),_readdouble(),_readdouble(),out x1, out x2);
if(solve)
if(x1==x2)
Write(string.Format("Решение уравнения: x={0}\n",x1));
else
Write(string.Format("Решения уравнения: x1={0}, x2={1}\n",x1,x2));
else
Write("You are realy dummy user, your equation havn't solve.\n");
do
{
Write("Try again, (Y/N) ?\n");
chr = _readChar();
}
while((chr!='Y')&&(chr!='y')&&(chr!='N')&&(chr!='n'));
if((chr=='N')||(chr=='n'))
doC = false;
}
}
}
}
Здравствуйте, AlexGK, Вы писали:
AGK>Здравствуйте, BCoder, Вы писали:
BC>>Привет, программисты !
BC>>Я вот написал программу для расчёта квадратного уравнения. Задумал её улучшить и сделал медленный вывод строки (как печатают на машинке). Когда я её писал на qbasic'е там была удобная комманда gosub, которая работала как goto, только позволяла вурнуться. BC>>Подскажите, а как это можно сделать на с#. BC>>Вот текст программы:
BC>>Спасибо. BC>>Иван
Забыл добавить: не надо использовать goto, сравни свой код и мой, в твоем глаза сломать можно, а пр расширяемость и говорить нечего.
Здравствуйте, AlexGK, Вы писали:
AGK>Вот работающий пример
Ещё один приколист AlexGK твой работающий пример неправильно считает
Более того, зачем на C# писать в таком ярко выраженном сишном стиле?
Короче надо было так (замедленным выводом не занимаюсь)
using System;
namespace cstest
{
enum SolverResult
{
Unknown,
Root0,
Root1,
Root2
};
class Solver
{
private double _a = 0.0;
private double _b = 0.0;
private double _c = 0.0;
private SolverResult _result = SolverResult.Unknown;
private double _root1 = 0.0;
private double _root2 = 0.0;
public Solver()
{
}
public void Execute()
{
if (_a != 0.0)
{
double discriminant = B*B - 4.0*A*C;
if (discriminant < 0.0)
{
_result = SolverResult.Root0;
}
else if (discriminant > 0.0)
{
_root1 = (-B + Math.Sqrt(discriminant))/(2*A);
_root2 = (-B - Math.Sqrt(discriminant))/(2*A);
_result = SolverResult.Root2;
}
else
{
_root1 = -B/(2*A);
_result = SolverResult.Root1;
}
}
else
{
_root1 = -C/B;
_result = SolverResult.Root1;
}
}
public double A
{
get {return _a;}
set
{
_a = value;
_result = SolverResult.Unknown;
}
}
public double B
{
get {return _b;}
set
{
_b = value;
_result = SolverResult.Unknown;
}
}
public double C
{
get {return _c;}
set
{
_c = value;
_result = SolverResult.Unknown;
}
}
public SolverResult Result
{
get {return _result;}
}
public double Root1
{
get
{
if ((Result == SolverResult.Root1) || (Result == SolverResult.Root2))
{
return _root1;
}
else
{
throw new NotSupportedException();
}
}
}
public double Root2
{
get
{
if (Result == SolverResult.Root2)
{
return _root2;
}
else
{
throw new NotSupportedException();
}
}
}
}
class CSTest
{
static bool ReadYN()
{
for (;;)
{
Console.Write("Do you want to solve one more equation? (Y/N): ");
string line = Console.ReadLine().Trim().ToUpper();
if (line.Length == 0)
{
Console.WriteLine("Invalid input - no input.");
}
else if ((line[0] != 'Y') && (line[0] != 'N'))
{
Console.WriteLine("Invalid input - not Y or N.");
}
else
{
return line[0] == 'Y';
}
}
}
static double ReadDouble()
{
for (;;)
{
string line = Console.ReadLine();
if (line.Length == 0)
{
Console.WriteLine("Invalid input - no input.");
}
else
{
try
{
return double.Parse(line);
}
catch (FormatException e)
{
Console.WriteLine(e.Message);
}
}
}
}
[STAThread]
static void Main(string [] args)
{
Console.WriteLine("Quadratic equation solver 1.0");
for (bool answer = true; answer; answer = ReadYN())
{
Solver solver = new Solver();
Console.Write("Enter coefficient A: ");
solver.A = ReadDouble();
Console.Write("Enter coefficient B: ");
solver.B = ReadDouble();
Console.Write("Enter coefficient C: ");
solver.C = ReadDouble();
solver.Execute();
switch (solver.Result)
{
case SolverResult.Root0:
Console.WriteLine("No roots");
break;
case SolverResult.Root1:
Console.WriteLine("The only root is {0}", solver.Root1);
break;
case SolverResult.Root2:
Console.WriteLine("First root is {0} and second is {1}", solver.Root1, solver.Root2);
break;
}
}
}
}
}
Здравствуйте, AlexGK, Вы писали:
AGK>Это такой прикол? Хотя помнится на первом курсе наш пепод так любил goto,что потом еле-еле отучился
На самом деле, существует много разных языков и разных компьютеров... Я например, школьником, решал квадратные уравнения при помощи девайса — калькулятор МК-?? Там был goto... и был особый стиль программирования — ищу GOSUB
вот он продемонстрован. На моём оборудовании, по другому (без goto) программировать было нельзя, подозреваю что и сейчас существует техника на которой без goto не обойтись, какие нибудь станки с ЧПУ....
Я сам очень долго учился мыслить без goto, и отвыкать было довольно таки сложно.
Так, что может это не прикол — человек работает с старой (?) техникой....
silent RSDN@Home 1.1.4 beta 7 [447] Windows XP 5.1.2600.0
AGK> Write("Hellow, dummy user !\n");
AGK> Write("I am a Great Programm !\n");
AGK> Write("My Great Mission is to solve quadratic equation !\n");
AGK> Write("New economy algorithm for memory using !!!\n");
AGK>
ты не сделал медленный, посимвольный вывод сообщения
silent RSDN@Home 1.1.4 beta 7 [447] Windows XP 5.1.2600.0
ищу GOSUB
От:
Аноним
Дата:
30.06.05 21:40
Оценка:
Если пишешь на C шарп, то используй возможности именно этого языка и ОТУЧАЙСЯ от goto.
Здравствуйте, DEMON HOOD, Вы писали:
DH>Здравствуйте, AlexGK, Вы писали:
AGK>>
AGK>> Write("Hellow, dummy user !\n");
AGK>> Write("I am a Great Programm !\n");
AGK>> Write("My Great Mission is to solve quadratic equation !\n");
AGK>> Write("New economy algorithm for memory using !!!\n");
AGK>>
DH>ты не сделал медленный, посимвольный вывод сообщения
Здравствуйте, adontz, Вы писали:
A>Здравствуйте, AlexGK, Вы писали:
AGK>>Вот работающий пример
A>Ещё один приколист AlexGK твой работающий пример неправильно считает A>Более того, зачем на C# писать в таком ярко выраженном сишном стиле? A>Короче надо было так (замедленным выводом не занимаюсь)
Если что-то не так надо переделать метод _solve(..). Задача была не заставить программу считать а написать аналог без goto. Насче создания отдельного класса я тоже думал, была идея и как сделать read из консоли нормально, более централизовано и правильно. Но я давно себя отучил не делать того,ч ео делать не надо. Если ,предположим, это была часть какого-то большого проекта — другое дело, а так, знаешь ли....
Здравствуйте, adontz, Вы писали:
A>Здравствуйте, AlexGK, Вы писали:
AGK>>Вот работающий пример
A>Ещё один приколист AlexGK твой работающий пример неправильно считает A>Более того, зачем на C# писать в таком ярко выраженном сишном стиле? A>Короче надо было так (замедленным выводом не занимаюсь)
А вообще, я тебе так скажу: если у меня была бы необходимость высчитывать корни квадратного уравнения я бы поместил один статичный метод в класс типа Common.Functions, я понимаю, что у нас ООП, но в этом случае такой необходимости нет, потому что все вычисляется в один метод, в пять строк, без вызова других внутри. Делать отдельный класс для пяти строк, это слишком (не спорю, что там есть и проперти и проч не нужная лабуда, но все что необходимо, это пять строк)
Здравствуйте, AlexGK, Вы писали:
AGK>Здравствуйте, BCoder, Вы писали:
BC>>Привет, программисты !
BC>>Я вот написал программу для расчёта квадратного уравнения. Задумал её улучшить и сделал медленный вывод строки (как печатают на машинке). Когда я её писал на qbasic'е там была удобная комманда gosub, которая работала как goto, только позволяла вурнуться. BC>>Подскажите, а как это можно сделать на с#. BC>>Вот текст программы:
BC>>Спасибо. BC>>Иван
AGK>Это такой прикол? Хотя помнится на первом курсе наш пепод так любил goto,что потом еле-еле отучился
Если честно, то я когда начинал программировать сначала на Басике, а потом на Паскале, с негодованием принимал отсутствие номера строки и презрение опытных программистов к GOTO
Это один из агрументов в теме "Влияние языка на качество программирования"
Ищу работу, 3D, SLAM, computer graphics/vision.
Re: ищу GOSUB
От:
Аноним
Дата:
01.07.05 08:54
Оценка:
наверное есть языки в которых без goto вааще никак, но при попытке такие вспомнить, приходит на ум только бейсик для спектрума(крутейшая штуковина была, надо сказать
10: LOAD ""
20: PRINTF ("Hello, world!")
30: .............................
40: GOTO 20
дамс, синтаксис забыл напрочь, надо освежить
).
А если есть возможность его не юзать, то имхо лучше его не юзать.
Здравствуйте, dshe, Вы писали:
D>Вместо GOSUB уже давно используется вызов методов. (С передачей параметрами и прочими прелестями)
В моей программе очень много комманд goto, и если для каждой писать свой метод, то программа станет большой и сложной. Вот я нашёл комманду return, но она работает не правильно, программа просто останавливается.
Здравствуйте, BCoder, Вы писали:
BC>Здравствуйте, dshe, Вы писали:
D>>Вместо GOSUB уже давно используется вызов методов. (С передачей параметрами и прочими прелестями)
BC>В моей программе очень много комманд goto, и если для каждой писать свой метод, то программа станет большой и сложной. Вот я нашёл комманду return, но она работает не правильно, программа просто останавливается.
Я же говорю: сравни мой код и свой, есть еще более компактный вариант( там пару условий можно убрать). Какя тебе собственно разница много goto или много чего-то типа void _func(...).
Спорит не буду, кто рожден "летать" с goto, тот не будет "пользать" в ООП