ищу GOSUB
От: BCoder Россия http://bcoder.narod.ru
Дата: 30.06.05 16:55
Оценка: 33 (11) :))) :))) :))) :))) :))) :))) :))) :))) :))) :))) :))) :))) :))) :))) :))) :))) :))) :))) :))) :))) :))) :))) :))) :))) :))) :)
Привет, программисты !

Я вот написал программу для расчёта квадратного уравнения. Задумал её улучшить и сделал медленный вывод строки (как печатают на машинке). Когда я её писал на qbasic'е там была удобная комманда gosub, которая работала как goto, только позволяла вурнуться.
Подскажите, а как это можно сделать на с#.
Вот текст программы:


using System;

namespace MegaRulezzz
{
    class Class1
    {
        static float v1, v2, v3;
        static string s0;
        static char i;
        static int j;
        static void Main(string[] args)
        {
            lminus5:
                s0 = "Hellow, dummy user !\n";
                i=(char)0;
                goto l100;
            lminus4:
                s0= "I am a Great Programm !\n";
                i=(char)1;
                goto l100;
            lminus3:
                s0= "My Great Mission is to solve quadratic equation !\n";
                i=(char)2;
                goto l100;
            lminus2:
                s0= "New economy algorithm for memory using !!!\n";
                i=(char)3;
                goto l100;
            lminus1:
            l0:
                s0= "Please, dummy user, insert a,b,c koefficients :\n";
                i=(char)4;
                goto l100;
            l1:
                v1 = (float)Convert.ToDouble(Console.ReadLine());
                v2= (float)Convert.ToDouble(Console.ReadLine());
                v3= (float)Convert.ToDouble(Console.ReadLine());
            l3:
                if (v2*v2 <4*v1*v3) goto l4;
                goto l5;
            l4:
                s0= "You are realy dummy user, your equation havn't solve.\n";
                i=( char)6;
                goto l100;
            l4a:
                s0="Try again, (Y/N) ?\n";
                i=(char)7;
                goto l100;
            l4b:
                v1 = (float)Console.Read();
                Console.ReadLine();
                if(v1 == 121) goto l0;
                if(v1 == 110) goto l9;
                goto l4a;
            l5:
                v3 = v2*v2 -4*v1*v3;
                v3 = (float)Math.Sqrt(v3)/ v1/2;
                v2 /= -2*v1;
                v1 = v2 + v3;
                v2 = v1 - 2*v3;
            l7:
                s0= "x1 =" + v1.ToString()+ "\n";
                i=(char)11;
                goto l100;
            l7a:
                s0="x2 = " +v2.ToString() +"\n";
                i=(char)10;
                goto l100;
            l8:
                s0="Once again, (Y/N) ?\n";
                i=(char)9;
                goto l100;
            l8a:
                v1 = (float)Console.Read();
                Console.ReadLine();
                if(v1 == 121) goto l0;
                if(v1 == 110) goto l9;
                goto l8;
            l9:
                goto l1000;

            l100:
                j=-1;
            l101:
                if(j==s0.Length-1) goto l110;
                Console.Write(s0[j=j+1].ToString());
                System.Threading.Thread.Sleep(50);
                goto l101;
            l110:
                if(i==0 ) goto lminus4;
                if(i==1) goto lminus3;
                if(i==2) goto lminus2;
                if(i==3) goto lminus1;
                if(i==4 ) goto l1;
                if(i==6 ) goto l4a;
                if(i==7) goto l4b;
                if(i==11 ) goto l7a;
                if(i==10) goto l8;
                if(i==9) goto l8a;
                if(i==12) goto l1001;
                goto lminus5;
            l1000:
                s0 ="Goodbye, user.\n";
                i=(char)12;
                goto l100;
            l1001:;
        }
    }
}



Спасибо.
Иван



30.06.05 22:54: Перенесено из '.NET'
Re: ищу GOSUB
От: SiAVoL Россия  
Дата: 01.07.05 05:22
Оценка: 3 (1) :))) :))) :))) :))) :))
Здравствуйте, BCoder, Вы писали:

BC>Я вот написал программу для расчёта квадратного уравнения.

все круто! но вот с форматированием... лучше писать так

using System;
namespace MegaRulezzz{class Class1{static 
float v1, v2, v3;static string s0;static 
char i;static int j;static void Main(string[] 
args){lminus5:s0="Hellow, dummy user !\n";i=
(char)0;goto l100;lminus4:s0=
"I am a Great Programm !\n";i=(char)1;goto l100;
lminus3:s0="My Great Mission is to solve quadratic equation !\n";
i=(char)2;goto l100;lminus2:s0=
"New economy algorithm for memory using !!!\n";i=(char)3;goto l100;
lminus1:l0:s0="Please, dummy user, insert a,b,c koefficients :\n";
i=(char)4;goto l100;l1:v1=(float)Convert.ToDouble(Console.ReadLine());
v2=(float)Convert.ToDouble(Console.ReadLine());v3=(float)Convert.
ToDouble(Console.ReadLine());l3:if(v2*v2<4*v1*v3)goto l4;goto l5;
l4:s0="You are realy dummy user, your equation havn't solve.\n";
i=(char)6;goto l100;l4a:s0="Try again, (Y/N) ?\n";i=(char)7;
goto l100;l4b:v1=(float)Console.Read();Console.ReadLine();
if(v1==121)goto l0;if(v1==110)goto l9;goto l4a;l5:v3=v2*v2-4
*v1*v3;v3=(float)Math.Sqrt(v3)/v1/2;v2/=-2*v1;v1=v2+v3;v2=v1-
2*v3;l7:s0="x1 ="+v1.ToString()+"\n";i=(char)11;goto l100;
l7a:s0="x2 = "+v2.ToString()+"\n";i=(char)10;goto l100;l8:
s0="Once again, (Y/N) ?\n";i=(char)9;goto l100;l8a:v1=(float)
Console.Read();Console.ReadLine();if(v1==121)goto l0;if(v1==
110)goto l9;goto l8;l9:goto l1000;l100:j=-1;l101:if(j==s0.Length
-1)goto l110;Console.Write(s0[j=j+1].ToString());System.
Threading.Thread.Sleep(50);goto l101;l110:if(i==0)goto 
lminus4;if(i==1)goto lminus3;if(i==2)goto lminus2;if(i==3) 
goto lminus1;if(i==4)goto l1;if(i==6)goto l4a;if(i==7)goto 
l4b;if(i==11)goto l7a;if(i==10)goto l8;if(i==9)goto l8a;if
(i==12)goto l1001;goto lminus5;l1000:s0="Goodbye, user.\n";
i=(char)12;goto l100;l1001:;}}}


Спасибо тебе, Иван!
... << RSDN@Home 1.1.4 beta 7 rev. 501>>
Re[2]: ищу GOSUB
От: BCoder Россия http://bcoder.narod.ru
Дата: 01.07.05 10:09
Оценка: 3 (1) :))) :))) :))) :))) :)
Здравствуйте, dshe, Вы писали:

D>Вместо GOSUB уже давно используется вызов методов. (С передачей параметрами и прочими прелестями)


В моей программе очень много комманд goto, и если для каждой писать свой метод, то программа станет большой и сложной. Вот я нашёл комманду return, но она работает не правильно, программа просто останавливается.
Re: ищу GOSUB
От: BCoder Россия http://bcoder.narod.ru
Дата: 04.07.05 09:40
Оценка: 3 (1) :)))
Снова привет, программисты.

Я тут посмотрел предложенные программы, но в них ещё не разобрался.
Зато я полазил по сайту и почитал про объектно ориентированное программирование, и мы на выходных с другом программистом на турбо паскале переписали программу без комманды goto с помощью процедур.



Вот что получилось:

using System;

namespace MegaRulezzz
{
    using System;

    class Class1
    {
        static float v1, v2, v3;
        static string s0;
        static char i;
        static int j;
        static void Main(string[] args)
        {
            lminus5();
        }
        static void lminus5()
        {
            s0 = "Hellow, dummy user !\n";
            i=(char)0;
            l100();
        }
        static void    lminus4()
        {
            s0= "I am a Great Programm !\n";
            i=(char)1;
            l100();
        }
        static void    lminus3()
        {
            s0= "My Great Mission is to solve quadratic equation !\n";
            i=(char)2;
            l100();
        }
        static void    lminus2()
        {
            s0= "New economy algorithm for memory using !!!\n";
            i=(char)3;
            l100();
        }
        static void    lminus1()
        {
            l0();
        }
        static void    l0()
        {
            s0= "Please, dummy user, insert a,b,c koefficients :\n";
            i=(char)4;
            l100();
        }
        static void    l1()
        {
            v1 = (float)Convert.ToDouble(Console.ReadLine());
            v2= (float)Convert.ToDouble(Console.ReadLine());
            v3= (float)Convert.ToDouble(Console.ReadLine());
            l3();
        }
        static void    l3()
        {
            if (v2*v2 <4*v1*v3) l4();
            if (i==4) l5();
        }
        static void    l4()
        {
            s0= "You are realy dummy user, your equation havn't solve.\n";
            i=( char)6;
            l100();
        }
        static void    l4a()
        {
            s0="Try again, (Y/N) ?\n";
            i=(char)7;
            l100();
        }
        static void    l4b()
        {
            v1 = (float)Console.Read();
            Console.ReadLine();
            if(v1 == 121) l0();
            if(v1 == 110) l9();
            if(i<12) l4a();
        }
        static void    l5()
        {
            v3 = v2*v2 -4*v1*v3;
            v3 = (float)Math.Sqrt(v3)/ v1/2;
            v2 /= -2*v1;
            v1 = v2 + v3;
            v2 = v1 - 2*v3;
            l7();
        }
        static void    l7()
        {
            s0= "x1 =" + v1.ToString()+ "\n";
            i=(char)11;
            l100();
        }
        static void    l7a()
        {
            s0="x2 = " +v2.ToString() +"\n";
            i=(char)10;
            l100();
        }
        static void    l8()
        {
            s0="Once again, (Y/N) ?\n";
            i=(char)9;
            l100();
        }
        static void    l8a()
        {
            v1 = (float)Console.Read();
            Console.ReadLine();
            if(v1 == 121) l0();
            if(v1 == 110) l9();
            if(i<12) l8();
        }
        static void    l9()
        {
            l1000();
        }
        static void    l100()
        {
            j=-1;
            l101();
        }
        static void    l101()
        {
            if(j<s0.Length-1) l101a();
            else l110();
        }
        static void l101a()
        {
            Console.Write(s0[j=j+1].ToString());
            System.Threading.Thread.Sleep(50);
            l101();
        }
        static void    l110()
        {
            if(i==0 ) lminus4();
            if(i==1) lminus3();
            if(i==2) lminus2();
            if(i==3) lminus1();
            if(i==4 ) l1();
            if(i==6 ) l4a();
            if(i==7) l4b();
            if(i==11 ) l7a();
            if(i==10) l8();
            if(i==9) l8a();
            if(i==12) l1001();
        }
        static void    l1000()
        {
            if(i<12) l1000a();
        }
        static void l1000a()
        {
            s0 ="Goodbye, user.\n";
            i=(char)12;
            l100();
        }
        static void    l1001()
        {
            ;
        }
    }
}



Иван
Re[6]: ищу GOSUB
От: AlexGK Россия  
Дата: 03.07.05 15:38
Оценка: -1 :)))
Здравствуйте, 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>Если раньше неправильно считало, то теперь вооще не компилируется


М-да..... в России две беды: доороги и люди, у которых не компилируются программы....
Re: ищу GOSUB
От: adontz Грузия http://adontz.wordpress.com/
Дата: 30.06.05 18:11
Оценка: 3 (1) :))
Здравствуйте, BCoder, Вы писали:

Вот сижу и думаю — зачем этому человеку C#?
A journey of a thousand miles must begin with a single step © Lau Tsu
Re[2]: ищу GOSUB
От: adontz Грузия http://adontz.wordpress.com/
Дата: 30.06.05 19:05
Оценка: 3 (1) :)
Здравствуйте, 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;
                }
            }
        }
    }
}
A journey of a thousand miles must begin with a single step © Lau Tsu
Re[3]: ищу GOSUB
От: AlexGK Россия  
Дата: 01.07.05 10:13
Оценка: 2 (1) +1
Здравствуйте, BCoder, Вы писали:

BC>Здравствуйте, dshe, Вы писали:


D>>Вместо GOSUB уже давно используется вызов методов. (С передачей параметрами и прочими прелестями)


BC>В моей программе очень много комманд goto, и если для каждой писать свой метод, то программа станет большой и сложной. Вот я нашёл комманду return, но она работает не правильно, программа просто останавливается.


Я же говорю: сравни мой код и свой, есть еще более компактный вариант( там пару условий можно убрать). Какя тебе собственно разница много goto или много чего-то типа void _func(...).
Спорит не буду, кто рожден "летать" с goto, тот не будет "пользать" в ООП
Re[2]: ищу GOSUB
От: BCoder Россия http://bcoder.narod.ru
Дата: 01.07.05 10:14
Оценка: :))
Здравствуйте, adontz, Вы писали:

A>Здравствуйте, BCoder, Вы писали:


A>Вот сижу и думаю — зачем этому человеку C#?


Да, вот мой друг программист на Turbo Pascale сказал что можно использовать комманду case вместо goto, но в c# у меня это не получилось.
Re[6]: ищу GOSUB
От: Аноним  
Дата: 03.07.05 15:02
Оценка: -2
Здравствуйте, 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>Если раньше неправильно считало, то теперь вооще не компилируется


Ты тупой? Наверное не компилируется потому что ";" надо ставить.
Re[2]: ищу GOSUB
От: faulx  
Дата: 04.07.05 10:07
Оценка: 2 (1)
По-моему, человек явно прикалывается и играет виртуальную личность. Но смешно. Жду продолжения.
Re[3]: ищу GOSUB
От: AlexGK Россия  
Дата: 01.07.05 05:06
Оценка: +1
Здравствуйте, 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>ты не сделал медленный, посимвольный вывод сообщения


Ты это серьезно?

private static void Write(string msg){
            foreach(char item in msg){
                Console.Write(item);
                Thread.Sleep(_timeOut);
            }
        }
Re[2]: ищу GOSUB
От: White Barsik  
Дата: 01.07.05 07:33
Оценка: +1
Здравствуйте, AlexGK, Вы писали:

AGK>Здравствуйте, BCoder, Вы писали:


BC>>Привет, программисты !


BC>>Я вот написал программу для расчёта квадратного уравнения. Задумал её улучшить и сделал медленный вывод строки (как печатают на машинке). Когда я её писал на qbasic'е там была удобная комманда gosub, которая работала как goto, только позволяла вурнуться.

BC>>Подскажите, а как это можно сделать на с#.
BC>>Вот текст программы:


BC>>Спасибо.

BC>>Иван


AGK>Это такой прикол? Хотя помнится на первом курсе наш пепод так любил goto,что потом еле-еле отучился

Если честно, то я когда начинал программировать сначала на Басике, а потом на Паскале, с негодованием принимал отсутствие номера строки и презрение опытных программистов к GOTO
Re: ищу GOSUB
От: Аноним  
Дата: 01.07.05 10:21
Оценка: +1
черезмерное употребление Бейсика разрушает мозг (с) Дийкстра
Re[2]: ищу GOSUB
От: BCoder Россия http://bcoder.narod.ru
Дата: 01.07.05 11:25
Оценка: :)
Здравствуйте, 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>



Спасибо за помощь, но я так и не понял как этот код решает уравнение, или для этого в С++ есть специальная комманда ? Если с++ так хорош, то может использовать его вместо с# ?

Иван
Re[3]: ищу GOSUB
От: ansi  
Дата: 15.09.05 05:53
Оценка: :)
Здравствуйте, faulx, Вы писали:

F>По-моему, человек явно прикалывается и играет виртуальную личность. Но смешно. Жду продолжения.


Здесь:
http://zhenaprogr.fastbb.ru/index.pl?1-0-0-000<a target="_blank" href="http://findbook.ru/search/?isbn=00004-000-0-0&ozon=rsdn&bolero=rsdnru&biblion=791&booksru=rsdn&zonex=248&piter=3600&myshop=00776">00004-000-0-0</a>-1126727490

Андрей — это я. StarBreeze.... наверное тоже с РСДН
Re[2]: Да кто такая света ?!
От: BCoder Россия http://bcoder.narod.ru
Дата: 15.09.05 09:24
Оценка: :)
Привет, chum, Вы писали:


C>И вам не болеть!



Мне кажется что это спланированная этака на светлый образ BCoder'а, война, вышедшего под флагами GOTO на поле брани с пропагандистскими течениями ООП и функциональщины.
Вот недавно читал о C# 3.0, да-а-а, чего только не напридумывают люди, чтобы избавиться от добрых goto и gosub.
Лучше бы развивали QBasic. Например сделали бы комманду GOTO [имя переменной], такой управляемый GOTO наверняка бы разрешил огромное число проблемм программистов.
Но ведь это не выгодно, ведь столько авторов обогащаются на несчастных-бедных программистах, вбухивающих кучу денег на книги об ООП. А эти выдумщики языков ? C++, C# (за пять? лет уже вышли версии 1.0, 2.0, 3.0) ?
Re[3]: Да кто такая света ?!
От: Pyromancer  
Дата: 15.09.05 09:58
Оценка: +1
BC>Лучше бы развивали QBasic. Например сделали бы комманду GOTO [имя переменной], такой управляемый GOTO наверняка бы разрешил огромное число проблемм программистов.

было, и даже выражения можно как адрес перехода в некоторых васиках юзать
Re: ищу GOSUB
От: dshe  
Дата: 30.06.05 17:13
Оценка:
Здравствуйте, BCoder, Вы писали:

BC>Я вот написал программу для расчёта квадратного уравнения. Задумал её улучшить и сделал медленный вывод строки (как печатают на машинке). Когда я её писал на qbasic'е там была удобная комманда gosub, которая работала как goto, только позволяла вурнуться.


Вместо GOSUB уже давно используется вызов методов. (С передачей параметрами и прочими прелестями)
--
Дмитро
Re: ищу GOSUB
От: AlexGK Россия  
Дата: 30.06.05 17:52
Оценка:
Здравствуйте, 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;
            }
            
        }
    }
}
Re[2]: ищу GOSUB
От: AlexGK Россия  
Дата: 30.06.05 17:54
Оценка:
Здравствуйте, AlexGK, Вы писали:

AGK>Здравствуйте, BCoder, Вы писали:


BC>>Привет, программисты !


BC>>Я вот написал программу для расчёта квадратного уравнения. Задумал её улучшить и сделал медленный вывод строки (как печатают на машинке). Когда я её писал на qbasic'е там была удобная комманда gosub, которая работала как goto, только позволяла вурнуться.

BC>>Подскажите, а как это можно сделать на с#.
BC>>Вот текст программы:


BC>>Спасибо.

BC>>Иван


Забыл добавить: не надо использовать goto, сравни свой код и мой, в твоем глаза сломать можно, а пр расширяемость и говорить нечего.
Re[2]: ищу GOSUB
От: DEMON HOOD  
Дата: 30.06.05 20:04
Оценка:
Здравствуйте, AlexGK, Вы писали:

AGK>Это такой прикол? Хотя помнится на первом курсе наш пепод так любил goto,что потом еле-еле отучился


На самом деле, существует много разных языков и разных компьютеров... Я например, школьником, решал квадратные уравнения при помощи девайса — калькулятор МК-?? Там был goto... и был особый стиль программирования — ищу GOSUB
Автор: BCoder
Дата: 30.06.05
вот он продемонстрован. На моём оборудовании, по другому (без goto) программировать было нельзя, подозреваю что и сейчас существует техника на которой без goto не обойтись, какие нибудь станки с ЧПУ....
Я сам очень долго учился мыслить без goto, и отвыкать было довольно таки сложно.
Так, что может это не прикол — человек работает с старой (?) техникой....
silent RSDN@Home 1.1.4 beta 7 [447] Windows XP 5.1.2600.0
Re[2]: ищу GOSUB
От: DEMON HOOD  
Дата: 30.06.05 20:05
Оценка:
Здравствуйте, 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>


ты не сделал медленный, посимвольный вывод сообщения
silent RSDN@Home 1.1.4 beta 7 [447] Windows XP 5.1.2600.0
ищу GOSUB
От: Аноним  
Дата: 30.06.05 21:40
Оценка:
Если пишешь на C шарп, то используй возможности именно этого языка и ОТУЧАЙСЯ от goto.


данное сообщение получено с www.gotdotnet.ru
ссылка на оригинальное сообщение
Re[3]: ищу GOSUB
От: AlexGK Россия  
Дата: 01.07.05 05:13
Оценка:
Здравствуйте, adontz, Вы писали:

A>Здравствуйте, AlexGK, Вы писали:


AGK>>Вот работающий пример


A>Ещё один приколист AlexGK твой работающий пример неправильно считает

A>Более того, зачем на C# писать в таком ярко выраженном сишном стиле?
A>Короче надо было так (замедленным выводом не занимаюсь)


Если что-то не так надо переделать метод _solve(..). Задача была не заставить программу считать а написать аналог без goto. Насче создания отдельного класса я тоже думал, была идея и как сделать read из консоли нормально, более централизовано и правильно. Но я давно себя отучил не делать того,ч ео делать не надо. Если ,предположим, это была часть какого-то большого проекта — другое дело, а так, знаешь ли....
Re[3]: ищу GOSUB
От: AlexGK Россия  
Дата: 01.07.05 05:21
Оценка:
Здравствуйте, adontz, Вы писали:

A>Здравствуйте, AlexGK, Вы писали:


AGK>>Вот работающий пример


A>Ещё один приколист AlexGK твой работающий пример неправильно считает

A>Более того, зачем на C# писать в таком ярко выраженном сишном стиле?
A>Короче надо было так (замедленным выводом не занимаюсь)

А вообще, я тебе так скажу: если у меня была бы необходимость высчитывать корни квадратного уравнения я бы поместил один статичный метод в класс типа Common.Functions, я понимаю, что у нас ООП, но в этом случае такой необходимости нет, потому что все вычисляется в один метод, в пять строк, без вызова других внутри. Делать отдельный класс для пяти строк, это слишком (не спорю, что там есть и проперти и проч не нужная лабуда, но все что необходимо, это пять строк)
Re: ищу GOSUB
От: minorlogic Украина  
Дата: 01.07.05 07:50
Оценка:
Это один из агрументов в теме "Влияние языка на качество программирования"
Ищу работу, 3D, SLAM, computer graphics/vision.
Re: ищу GOSUB
От: Аноним  
Дата: 01.07.05 08:54
Оценка:
наверное есть языки в которых без goto вааще никак, но при попытке такие вспомнить, приходит на ум только бейсик для спектрума(крутейшая штуковина была, надо сказать
10: LOAD ""
20: PRINTF ("Hello, world!")
30: .............................
40: GOTO 20
дамс, синтаксис забыл напрочь, надо освежить
).
А если есть возможность его не юзать, то имхо лучше его не юзать.


данное сообщение получено с www.gotdotnet.ru
ссылка на оригинальное сообщение
Re: ищу GOSUB
От: Ranger_XL  
Дата: 01.07.05 11:13
Оценка:
Думаю, что хорошим в данном случае будет вариант замены 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;
}
Re[4]: ищу GOSUB
От: AlexGK Россия  
Дата: 01.07.05 17:48
Оценка:
Здравствуйте, AlexGK, Вы писали:

AGK>Здравствуйте, adontz, Вы писали:


Угу, надо исправить:
if((desc<0)||(a==0)
return false
x1=(-b+Math.Sqrt(desc)/(2*a)
x1=(-b+Math.Sqrt(desc)/(2*a)
Re: ищу GOSUB
От: AlexGK Россия  
Дата: 01.07.05 19:56
Оценка:
Здравствуйте, 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'));
        }
    }
}
Re[5]: ищу GOSUB
От: adontz Грузия http://adontz.wordpress.com/
Дата: 01.07.05 20:25
Оценка:
Здравствуйте, AlexGK, Вы писали:

Угу, надо исправить:
if((desc<0)||(a==0))
return false
x1=(-b+Math.Sqrt(desc))/(2*a)
x1=(-b+Math.Sqrt(desc))/(2*a)

Если раньше неправильно считало, то теперь вооще не компилируется
A journey of a thousand miles must begin with a single step © Lau Tsu
Re[3]: ищу GOSUB
От: mr_ST  
Дата: 02.07.05 19:17
Оценка:
Здравствуйте, DEMON HOOD, Вы писали:

DH>На самом деле, существует много разных языков и разных компьютеров... Я например, школьником, решал квадратные уравнения при помощи девайса — калькулятор МК-?? Там был goto... и был особый стиль программирования — ищу GOSUB
Автор: BCoder
Дата: 30.06.05
вот он продемонстрован. На моём оборудовании, по другому (без goto) программировать было нельзя, подозреваю что и сейчас существует техника на которой без goto не обойтись, какие нибудь станки с ЧПУ....


На уровне маш.кодов без goto не обойдешься, но не на уровне языка. Firmware для контроллеров давно уже пишут на С и даже на C++, в некоторых случаях на ассемблере.
... << RSDN@Home 1.1.4 beta 7 rev. 447>>
Re[3]: ищу GOSUB
От: Ranger_XL  
Дата: 04.07.05 05:28
Оценка:
BC>Спасибо за помощь, но я так и не понял как этот код решает уравнение, или для этого в С++ есть специальная комманда ? Если с++ так хорош, то может использовать его вместо с# ?

Этот код не решает уравнение, он демонстрирует, как заменить goto/gosub
Re[3]: ищу GOSUB
От: Аноним  
Дата: 04.07.05 06:01
Оценка:
Лежу на полу, и бьюсь в истерике...

jmz, однозначно, Иван, тебе нужен jmz...

А губит людей даже не goto, губит многих людей их собственный мозг, честное слово.
Found By Iteration — XML Powered — .NET Built
Блог [[url=http://blogs.gotdotnet.ru/personal/Maniaque]http://blogs.gotdotnet.ru/personal/Maniaque[/url]]


данное сообщение получено с www.gotdotnet.ru
ссылка на оригинальное сообщение
Re[3]: ищу GOSUB
От: BCoder Россия http://bcoder.narod.ru
Дата: 04.07.05 11:12
Оценка:
Здравствуйте, faulx, Вы писали:

F>По-моему, человек явно прикалывается и играет виртуальную личность. Но смешно. Жду продолжения.


Да нет, просто я только две недели назад взялся писать программы на c#, а до этого был программистом на qbasice.


Иван
Re[4]: ищу GOSUB
От: SiAVoL Россия  
Дата: 04.07.05 11:38
Оценка:
Здравствуйте, BCoder, Вы писали:

BC>Да нет, просто я только две недели назад взялся писать программы на c#, а до этого был программистом на qbasice.

долго?
... << RSDN@Home 1.1.4 beta 7 rev. 501>>
Re[4]: ищу GOSUB
От: crackoff Россия  
Дата: 04.07.05 12:11
Оценка:
Здравствуйте, BCoder, Вы писали:


BC>Да нет, просто я только две недели назад взялся писать программы на c#, а до этого был программистом на qbasice.


Ну все, капец тебе
Автор: AndrewVK
Дата: 19.05.05
... << RSDN@Home 1.1.4 beta 6a rev. 436> <под Nightwish — Nightguest>>
Re[3]: ищу GOSUB
От: LinoGE Украина http://users.livejournal.com/_linoge_/
Дата: 05.07.05 15:51
Оценка:
Здравствуйте, faulx, Вы писали:

F>По-моему, человек явно прикалывается и играет виртуальную личность. Но смешно. Жду продолжения.


Поддерживаю
После первого поста было смешно, а потом явно стал просматриваться стеб
ИМХО конечно.

А потом мне на ум пришел случай.
У нас в универе далеко не все кто учился в нашей группе хотели стать программистами, и мало кто что-то хоть отдаленно понимал в программировании. Я их не виню, это им просто не нужно было, а поступали все по разным причинам. Кому поступать было больше не куда, кто в армию не хотел
Так вот, были у нас подобные задачки в универе, и некоторые студенты просто драли эти лабораторки у других, а некоторые отчаянно пытались их сделать. Например, нужно было написать программу которая бы умножала матрицы размером 4x4. Был парень, который вместо того, чтобы массив объявить объявлял кучу переменных типа A11, A12, A13, ... A44.

Не хочу никого обидеть, просто первая мысль была что человек прикалывается, а потом пришел на ум ряд универских случаев. Так что в принципе такое возможно
... << RSDN@Home 1.1.4 beta 7 rev. 447>>
Re[3]: ищу GOSUB
От: Evgeniy13 Россия  
Дата: 05.07.05 19:19
Оценка:
А знаешь, есть такие книжки... там на обложке нарисовано что-то наподобие "Язык C#".
Советую сперва ознакомиться, прежде чем писать подобный код...
Не все в этом мире можно выразить с помощью нулей и единиц...
Re[2]: ищу GOSUB
От: Слава Шевцов Россия http://www.rentaguru.ru/
Дата: 15.09.05 08:25
Оценка:
Здравствуйте, 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>


Разбирая код нашёл пару логических ошибок. Теперь попробуй найти ты
----------------------------------------------------------------------------------------------
Rentaguru
Re: Здравствуй, Света!
От: chum Россия  
Дата: 15.09.05 08:50
Оценка:
Здравствуйте, BCoder, Вы писали:

BC>Привет, программисты !


И вам не болеть!
Если есть возможность отдать человеку все, не прося ничего взамен — отдай. Если тебе один раз из десяти долг отдадут — будешь богатым.
Re[3]: Да кто такая света ?!
От: chum Россия  
Дата: 15.09.05 09:35
Оценка:
Если Вы и не Света, то надо, хотя бы, знать, под кого Вы косите

http://www.israsoft.co.il/index.php?option=content&amp;task=view&amp;id=68&amp;Itemid=27
Если есть возможность отдать человеку все, не прося ничего взамен — отдай. Если тебе один раз из десяти долг отдадут — будешь богатым.
Re[4]: Да кто такая света ?!
От: Sh1ZoID Россия http://vkontakte.ru/id6263850
Дата: 15.09.05 11:37
Оценка:
Здравствуйте, chum, Вы писали:

C>Если Вы и не Света, то надо, хотя бы, знать, под кого Вы косите


C>http://www.israsoft.co.il/index.php?option=content&amp;task=view&amp;id=68&amp;Itemid=27


Тайный друг-программист...ссылка на его/её сайте (друзья)...всё это действительно Светкой попахивает!!!
Re: ищу GOSUB
От: Аноним  
Дата: 15.09.05 11:57
Оценка:
Пачти ассемблер ёмаё
Re: ищу GOSUB
От: APTEC Россия  
Дата: 15.09.05 20:04
Оценка:
Как грится "Афтар жжот". Я бы до такого не додумался
Re[5]: Да кто такая света ?!
От: Аноним  
Дата: 16.09.05 03:29
Оценка:
Здравствуйте, Sh1ZoID, Вы писали:

SZI>Здравствуйте, chum, Вы писали:


C>>Если Вы и не Света, то надо, хотя бы, знать, под кого Вы косите


C>>http://www.israsoft.co.il/index.php?option=content&amp;task=view&amp;id=68&amp;Itemid=27


SZI> Тайный друг-программист...ссылка на его/её сайте (друзья)...всё это действительно Светкой попахивает!!!



Неее это не Светка и не друг никакой это её муж программист

ЗЫ если меня память не подводит то на одном из форумов она замуж за програмиста выскочила (по моему когда боролась или ЛЕЧИЛА вирусы )
Re[6]: Да кто такая света ?!
От: Слава Шевцов Россия http://www.rentaguru.ru/
Дата: 16.09.05 05:21
Оценка:
Здравствуйте, Аноним, Вы писали:

А>Неее это не Светка и не друг никакой это её муж программист


А>ЗЫ если меня память не подводит то на одном из форумов она замуж за програмиста выскочила (по моему когда боролась или ЛЕЧИЛА вирусы )


А это не про неё Экслер написал "Записки невесты программиста"?
----------------------------------------------------------------------------------------------
Rentaguru
Re: ищу GOSUB
От: BuggyBaby Украина  
Дата: 16.09.05 16:40
Оценка:
Здорово —
А еще смешнее советы
отучаться от GOTO Но мы же знаем, что без GOTO жить нельзя

Re[2]: Здравствуй, Света!
От: StatujaLeha на правах ИМХО
Дата: 18.09.05 13:37
Оценка:
Здравствуйте, chum, Вы писали:

C>Здравствуйте, BCoder, Вы писали:


BC>>Привет, программисты !


C>И вам не болеть!


читаю тему http://www.rsdn.ru/Forum/Message.aspx?mid=1378647&amp;only=1
Автор: Anton Batenev
Дата: 13.09.05
, перехожу по ссылке и вижу, что
оно и тут. Плодится со скоростью светы(а?) :D

http://zhenaprogr.fastbb.ru/index.pl?1-0-0-00000005-000-0-0-1126794339
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.