Думаю, что хорошим в данном случае будет вариант замены goto на switch. Как в С# это будет, на 100% утверждать не буду, но в С++ примерно так:
#include <iostream>
#include <string>
using namespace std;
int main()
{
string s0;
enum _states {S1, S2, S3, S4, SEND};
_states state = S1;
while (state != SEND) {
switch (state) {
case S1:
s0 = "Hellow, dummy user!\n";
state = S2;
break;
case S2:
s0 = "I'm a mighty oracul!\n";
state = S3;
break;
case S3:
s0 = "Do you want to know your future?\n";
state = S4;
break;
case S4:
s0 = "Whatever you want your fate is DEATH :)\n";
state = SEND;
break;
}
cout << s0;
}
return 0;
}
Здравствуйте, Ranger_XL, Вы писали:
R_X>Думаю, что хорошим в данном случае будет вариант замены goto на switch. Как в С# это будет, на 100% утверждать не буду, но в С++ примерно так: R_X>
R_X>#include <iostream>
R_X>#include <string>
R_X>using namespace std;
R_X>int main()
R_X>{
R_X> string s0;
R_X> enum _states {S1, S2, S3, S4, SEND};
R_X> _states state = S1;
R_X> while (state != SEND) {
R_X> switch (state) {
R_X> case S1:
R_X> s0 = "Hellow, dummy user!\n";
R_X> state = S2;
R_X> break;
R_X> case S2:
R_X> s0 = "I'm a mighty oracul!\n";
R_X> state = S3;
R_X> break;
R_X> case S3:
R_X> s0 = "Do you want to know your future?\n";
R_X> state = S4;
R_X> break;
R_X> case S4:
R_X> s0 = "Whatever you want your fate is DEATH :)\n";
R_X> state = SEND;
R_X> break;
R_X> }
R_X> cout << s0;
R_X> }
R_X> return 0;
R_X>}
R_X>
Спасибо за помощь, но я так и не понял как этот код решает уравнение, или для этого в С++ есть специальная комманда ? Если с++ так хорош, то может использовать его вместо с# ?
Здравствуйте, BCoder, Вы писали:
BC>Привет, программисты !
BC>Я вот написал программу для расчёта квадратного уравнения. Задумал её улучшить и сделал медленный вывод строки (как печатают на машинке). Когда я её писал на qbasic'е там была удобная комманда gosub, которая работала как goto, только позволяла вурнуться. BC>Подскажите, а как это можно сделать на с#. BC>Вот текст программы:
Окончательный вариант:
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) || (a == 0))
return false;
x1 = (-b + Math.Sqrt(desc)) / (2 * a);
x2 = (-b - Math.Sqrt(desc)) / (2 * a);
return true;
}
static double _readdouble(ref bool ex) {
try {
return double.Parse(Console.ReadLine());
}
catch (FormatException) {
ex = true;
return 0.0;
}
}
static char _readChar() {
try {
return char.Parse(Console.ReadLine());
}
catch (FormatException) {
return' ';
}
}
private static bool _readVals(out Double a, out Double b, out Double c) {
bool pr = false;
a = _readdouble(ref pr);
b = _readdouble(ref pr);
c = _readdouble(ref pr);
return pr;
}
private static bool _isDstChar(char src, char dst) {
return (src == Char.ToUpper(dst)) || (src == Char.ToLower(dst));
}
static void Main(string[] args) {
double x1, x2, a, b, c;
char chr;
do {
Write("Введите коэффициенты квадратного уравнения:\n");
if (_readVals(out a, out b, out c))
Write("Введенные значения числами не являются!\n");
else
if (_solve(a, b, c, out x1, out x2))
if (x1 == x2)
Write(string.Format("Решение уравнения: x={0}\n", x1));
else
Write(string.Format("Решения уравнения: x1={0}, x2={1}\n", x1, x2));
else
Write("Уравнение решения не имеет.\n");
do Write("Попробуете еще раз, (Y/N) ?\n");
while (((chr = _readChar()) == ' ') || (!_isDstChar(chr, 'y') && !_isDstChar(chr, 'n')));
} while (!_isDstChar(chr, 'n'));
}
}
}
Здравствуйте, DEMON HOOD, Вы писали:
DH>На самом деле, существует много разных языков и разных компьютеров... Я например, школьником, решал квадратные уравнения при помощи девайса — калькулятор МК-?? Там был goto... и был особый стиль программирования — ищу GOSUB
вот он продемонстрован. На моём оборудовании, по другому (без goto) программировать было нельзя, подозреваю что и сейчас существует техника на которой без goto не обойтись, какие нибудь станки с ЧПУ....
На уровне маш.кодов без goto не обойдешься, но не на уровне языка. Firmware для контроллеров давно уже пишут на С и даже на C++, в некоторых случаях на ассемблере.
Здравствуйте, adontz, Вы писали:
A>Здравствуйте, AlexGK, Вы писали:
A>Угу, надо исправить: A>if((desc<0)||(a==0)) A>return false A>x1=(-b+Math.Sqrt(desc))/(2*a) A>x1=(-b+Math.Sqrt(desc))/(2*a)
A>Если раньше неправильно считало, то теперь вооще не компилируется
Ты тупой? Наверное не компилируется потому что ";" надо ставить.
Здравствуйте, adontz, Вы писали:
A>Здравствуйте, AlexGK, Вы писали:
A>Угу, надо исправить: A>if((desc<0)||(a==0)) A>return false A>x1=(-b+Math.Sqrt(desc))/(2*a) A>x1=(-b+Math.Sqrt(desc))/(2*a)
A>Если раньше неправильно считало, то теперь вооще не компилируется
М-да..... в России две беды: доороги и люди, у которых не компилируются программы....
BC>Спасибо за помощь, но я так и не понял как этот код решает уравнение, или для этого в С++ есть специальная комманда ? Если с++ так хорош, то может использовать его вместо с# ?
Этот код не решает уравнение, он демонстрирует, как заменить goto/gosub
Re[3]: ищу GOSUB
От:
Аноним
Дата:
04.07.05 06:01
Оценка:
Лежу на полу, и бьюсь в истерике...
jmz, однозначно, Иван, тебе нужен jmz...
А губит людей даже не goto, губит многих людей их собственный мозг, честное слово.
Я тут посмотрел предложенные программы, но в них ещё не разобрался.
Зато я полазил по сайту и почитал про объектно ориентированное программирование, и мы на выходных с другом программистом на турбо паскале переписали программу без комманды goto с помощью процедур.
Здравствуйте, BCoder, Вы писали:
BC>Да нет, просто я только две недели назад взялся писать программы на c#, а до этого был программистом на qbasice.
долго?
Здравствуйте, faulx, Вы писали:
F>По-моему, человек явно прикалывается и играет виртуальную личность. Но смешно. Жду продолжения.
Поддерживаю
После первого поста было смешно, а потом явно стал просматриваться стеб
ИМХО конечно.
А потом мне на ум пришел случай.
У нас в универе далеко не все кто учился в нашей группе хотели стать программистами, и мало кто что-то хоть отдаленно понимал в программировании. Я их не виню, это им просто не нужно было, а поступали все по разным причинам. Кому поступать было больше не куда, кто в армию не хотел
Так вот, были у нас подобные задачки в универе, и некоторые студенты просто драли эти лабораторки у других, а некоторые отчаянно пытались их сделать. Например, нужно было написать программу которая бы умножала матрицы размером 4x4. Был парень, который вместо того, чтобы массив объявить объявлял кучу переменных типа A11, A12, A13, ... A44.
Не хочу никого обидеть, просто первая мысль была что человек прикалывается, а потом пришел на ум ряд универских случаев. Так что в принципе такое возможно
Здравствуйте, SiAVoL, Вы писали:
BC>>Я вот написал программу для расчёта квадратного уравнения. SAV>все круто! но вот с форматированием... лучше писать так
SAV>
SAV>using System;
SAV>namespace MegaRulezzz{class Class1{static
SAV>float v1, v2, v3;static string s0;static
SAV>char i;static int j;static void Main(string[]
SAV>args){lminus5:s0="Hellow, dummy user !\n";i=
SAV>(char)0;goto l100;lminus4:s0=
SAV>"I am a Great Programm !\n";i=(char)1;goto l100;
SAV>lminus3:s0="My Great Mission is to solve quadratic equation !\n";
SAV>i=(char)2;goto l100;lminus2:s0=
SAV>"New economy algorithm for memory using !!!\n";i=(char)3;goto l100;
SAV>lminus1:l0:s0="Please, dummy user, insert a,b,c koefficients :\n";
SAV>i=(char)4;goto l100;l1:v1=(float)Convert.ToDouble(Console.ReadLine());
SAV>v2=(float)Convert.ToDouble(Console.ReadLine());v3=(float)Convert.
SAV>ToDouble(Console.ReadLine());l3:if(v2*v2<4*v1*v3)goto l4;goto l5;
SAV>l4:s0="You are realy dummy user, your equation havn't solve.\n";
SAV>i=(char)6;goto l100;l4a:s0="Try again, (Y/N) ?\n";i=(char)7;
SAV>goto l100;l4b:v1=(float)Console.Read();Console.ReadLine();
SAV>if(v1==121)goto l0;if(v1==110)goto l9;goto l4a;l5:v3=v2*v2-4
SAV>*v1*v3;v3=(float)Math.Sqrt(v3)/v1/2;v2/=-2*v1;v1=v2+v3;v2=v1-
SAV>2*v3;l7:s0="x1 ="+v1.ToString()+"\n";i=(char)11;goto l100;
SAV>l7a:s0="x2 = "+v2.ToString()+"\n";i=(char)10;goto l100;l8:
SAV>s0="Once again, (Y/N) ?\n";i=(char)9;goto l100;l8a:v1=(float)
SAV>Console.Read();Console.ReadLine();if(v1==121)goto l0;if(v1==
SAV>110)goto l9;goto l8;l9:goto l1000;l100:j=-1;l101:if(j==s0.Length
SAV>-1)goto l110;Console.Write(s0[j=j+1].ToString());System.
SAV>Threading.Thread.Sleep(50);goto l101;l110:if(i==0)goto
SAV>lminus4;if(i==1)goto lminus3;if(i==2)goto lminus2;if(i==3)
SAV>goto lminus1;if(i==4)goto l1;if(i==6)goto l4a;if(i==7)goto
SAV>l4b;if(i==11)goto l7a;if(i==10)goto l8;if(i==9)goto l8a;if
SAV>(i==12)goto l1001;goto lminus5;l1000:s0="Goodbye, user.\n";
SAV>i=(char)12;goto l100;l1001:;}}}
SAV>
Разбирая код нашёл пару логических ошибок. Теперь попробуй найти ты