CYFROWY BARON • PROGRAMOWANIE • Zobacz wątek - Kod w C#

Kod w C#

dział ogólny

Kod w C#

Nowy postprzez Pitek » czwartek, 18 listopada 2010, 12:46

Witam mam kod który prezentuję poniżej jest on napisany w C#. Moje pytanie, prośba czy mógłby ktoś pomóc mi przetłumaczyć to na C++? :|
Kod mam z netu ale nie znalazłem go w C++.
W załączniku przesyłam ten program już skompilowany i jeszcze tak przy okazji czy wam też co chwile odzywa się brzęczyk systemowy podczas jego działania bo mnie tak nie wiem czemu :roll:
Proszę o pomoc.


Pozdrawiam pitek3010

KOD cpp:     UKRYJ  
using System;

namespace m7tr1x
{
    class Program
    {
        static void Main(string[] args)
        {
            Console.Title = "The Matrix (Remember It's a Secret)";
            Console.ForegroundColor = ConsoleColor.DarkGreen;
            Console.WindowLeft = Console.WindowTop = 0;
            Console.WindowHeight = Console.BufferHeight = Console.LargestWindowHeight;
            Console.WindowWidth = Console.BufferWidth = Console.LargestWindowWidth;

#if readkey
            Console.WriteLine("H1T 7NY K3Y T0 C0NT1NU3 =/");
            Console.ReadKey();
#endif

            Console.CursorVisible = false;
            int width, height;
            int[] y;
            int[] l;
            Initialize(out width, out height, out y, out l);
            int ms;

            while (true)
            {
                DateTime t1 = DateTime.Now;
                MatrixStep(width, height, y, l);
                ms = 10 - (int)((TimeSpan)(DateTime.Now - t1)).TotalMilliseconds;

                if (ms > 0)
                    System.Threading.Thread.Sleep(ms);

                if (Console.KeyAvailable)
                    if (Console.ReadKey().Key == ConsoleKey.F5)
                        Initialize(out width, out height, out y, out l);
            }
        }

static bool thistime = false;

private static void MatrixStep(int width, int height, int[] y, int[] l)
        {
            int x;
            thistime = !thistime;

            for (x = 0; x < width; ++x)
            {
                if (x % 11 == 10)
                {
                    if (!thistime)
                        continue;

                    Console.ForegroundColor = ConsoleColor.White;
                }
                else
                {
                    Console.ForegroundColor = ConsoleColor.DarkGreen;
                    Console.SetCursorPosition(x, inBoxY(y[x] - 2 - (l[x] / 40 * 2), height));
                    Console.Write(R);
                    Console.ForegroundColor = ConsoleColor.Green;
                }
                Console.SetCursorPosition(x, y[x]);
                Console.Write(R);
                y[x] = inBoxY(y[x] + 1, height);
                Console.SetCursorPosition(x, inBoxY(y[x] - l[x], height));
                Console.Write(' ');
            }
        }

private static void Initialize(out int width, out int height, out int[] y, out int[] l)
        {
            int h1;
            int h2 = (h1 = (height = Console.WindowHeight) / 2) / 2;
            width = Console.WindowWidth - 1;
            y = new int[width];
            l = new int[width];
            int x;
            Console.Clear();
            for (x = 0; x < width; ++x)
            {
                y[x] = r.Next(height);
                l[x] = r.Next(h2 * ((x % 11 != 10) ? 2 : 1), h1 * ((x % 11 != 10) ? 2 : 1));
            }
        }

static Random r = new Random();

        static char R
        {
            get
            {
                int t = r.Next(10);
                if (t <= 2)
                    return (char)('0' + r.Next(10));
                else if (t <= 4)
                    return (char)('a' + r.Next(27));
                else if (t <= 6)
                    return (char)('A' + r.Next(27));
                else
                    return (char)(r.Next(32, 255));
            }
        }

public static int inBoxY(int n, int height)
        {
            n = n % height;
            if (n < 0)
                return n + height;
            else
                return n;
        }
    }
}
Nie masz wystarczających uprawnień, aby zobaczyć pliki załączone do tego postu.
Komputer służy do tego aby ułatwić Ci pracę, której bez niego w ogóle byś nie miał.
E.Murphy
http://piotrekprogramy.pl
Avatar użytkownika
Pitek
Kreacjusz
Kreacjusz
 
Posty: 290
Dołączył(a): środa, 14 października 2009, 14:53
Lokalizacja: Rybnik/Wrocław
Podziękował : 43
Otrzymał podziękowań: 5
System operacyjny: Win 7 Ultimate 64bit SP1 / Ubuntu 19.04 LTS 64bit
Kompilator: Embarcadero RAD Studio XE2
SKYPE: pitek3010
Gadu Gadu: 7060047
    Windows XPFirefox

Re: Kod w C#

Nowy postprzez Cyfrowy Baron » czwartek, 18 listopada 2010, 12:56

Co ty chcesz tutaj tłumaczyć?! :roll: Ten kod jest kompatybilny z C++. Masz tutaj jakąś klasę Program , umieszczoną w przestrzeni nazw m7tr1x, by korzystać z tej klasy należy używać jej przestrzeni nazw, czyli m7tr1x::Program.
Avatar użytkownika
Cyfrowy Baron
Administrator
Administrator
 
Posty: 4716
Dołączył(a): niedziela, 13 lipca 2008, 15:17
Podziękował : 12
Otrzymał podziękowań: 442
System operacyjny: Windows 7 x64 SP1
Kompilator: Embarcadero RAD Studio XE2
C++ Builder XE2 Update 4
SKYPE: cyfbar
Gadu Gadu: 0
    Windows XPFirefox

Re: Kod w C#

Nowy postprzez polymorphism » czwartek, 18 listopada 2010, 13:37

Cyfrowy Baron napisał(a):Ten kod jest kompatybilny z C++

No nie jest kompatybilny. Pomijając fakt użycia .NET'owych klas, takie akcje w C++ nie przejdą:
KOD cpp:     UKRYJ  
...
int[] y;
int[] l;

...

private static void Initialize(..., out int[] y, out int[] l)
{
            ...
            y = new int[width];
            l = new int[width];
            ...
C++ Reference - opis wszystkich klas STL-a i funkcji C.
Avatar użytkownika
polymorphism
Doświadczony Programista ● Moderator
Doświadczony Programista ● Moderator
 
Posty: 2156
Dołączył(a): piątek, 19 grudnia 2008, 13:04
Podziękował : 0
Otrzymał podziękowań: 200
System operacyjny: Windows 8.1
Windows 10
Linux Mint 21.1
Kompilator: Visual Studio
Visual Studio Code
MSYS2 (MinGW, clang)
g++
clang
Gadu Gadu: 0
    Windows XPFirefox

Re: Kod w C#

Nowy postprzez Cyfrowy Baron » czwartek, 18 listopada 2010, 13:51

Hm... rzeczywiście. Jakoś mi to umknęło. Co to za typ out?
Avatar użytkownika
Cyfrowy Baron
Administrator
Administrator
 
Posty: 4716
Dołączył(a): niedziela, 13 lipca 2008, 15:17
Podziękował : 12
Otrzymał podziękowań: 442
System operacyjny: Windows 7 x64 SP1
Kompilator: Embarcadero RAD Studio XE2
C++ Builder XE2 Update 4
SKYPE: cyfbar
Gadu Gadu: 0
    Windows XPFirefox

Re: Kod w C#

Nowy postprzez polymorphism » czwartek, 18 listopada 2010, 13:54

Odpowiednik C++'owej referencji.
C++ Reference - opis wszystkich klas STL-a i funkcji C.
Avatar użytkownika
polymorphism
Doświadczony Programista ● Moderator
Doświadczony Programista ● Moderator
 
Posty: 2156
Dołączył(a): piątek, 19 grudnia 2008, 13:04
Podziękował : 0
Otrzymał podziękowań: 200
System operacyjny: Windows 8.1
Windows 10
Linux Mint 21.1
Kompilator: Visual Studio
Visual Studio Code
MSYS2 (MinGW, clang)
g++
clang
Gadu Gadu: 0
    Windows XPFirefox

Re: Kod w C#

Nowy postprzez Pitek » czwartek, 18 listopada 2010, 14:16

Mogę prosić jakiś poglądowy kod ? Co mam np. zrobić z tymi Console.
Bardzo proszę o jakiś kod ponieważ nie umie sobie z tym poradzić.
A co do tego brzęczyka to występuje on u was ?
Komputer służy do tego aby ułatwić Ci pracę, której bez niego w ogóle byś nie miał.
E.Murphy
http://piotrekprogramy.pl
Avatar użytkownika
Pitek
Kreacjusz
Kreacjusz
 
Posty: 290
Dołączył(a): środa, 14 października 2009, 14:53
Lokalizacja: Rybnik/Wrocław
Podziękował : 43
Otrzymał podziękowań: 5
System operacyjny: Win 7 Ultimate 64bit SP1 / Ubuntu 19.04 LTS 64bit
Kompilator: Embarcadero RAD Studio XE2
SKYPE: pitek3010
Gadu Gadu: 7060047
    Windows XPFirefox

Re: Kod w C#

Nowy postprzez polymorphism » czwartek, 18 listopada 2010, 14:29

Console to klasa służąca do obsługi standardowego I/O. Przekładając to na C++, będą to strumienie cin, cout i cerr.

Bardzo proszę o jakiś kod ponieważ nie umie sobie z tym poradzić.

Kto nie umie? ;) Próbowałeś w ogóle, bo ja tu nie widzę żadnego Twojego kodu w C++? Jak chcesz pomocy, to pytaj się o szczegóły, z którymi masz problem, a nie że czekasz na gotowy, przerobiony kod.
C++ Reference - opis wszystkich klas STL-a i funkcji C.
Avatar użytkownika
polymorphism
Doświadczony Programista ● Moderator
Doświadczony Programista ● Moderator
 
Posty: 2156
Dołączył(a): piątek, 19 grudnia 2008, 13:04
Podziękował : 0
Otrzymał podziękowań: 200
System operacyjny: Windows 8.1
Windows 10
Linux Mint 21.1
Kompilator: Visual Studio
Visual Studio Code
MSYS2 (MinGW, clang)
g++
clang
Gadu Gadu: 0
    Windows XPFirefox

Re: Kod w C#

Nowy postprzez Pitek » czwartek, 18 listopada 2010, 14:34

Ok będę próbował, dzięki.
Czy ktoś sprawdzał ten brzęczyk ? :?
Komputer służy do tego aby ułatwić Ci pracę, której bez niego w ogóle byś nie miał.
E.Murphy
http://piotrekprogramy.pl
Avatar użytkownika
Pitek
Kreacjusz
Kreacjusz
 
Posty: 290
Dołączył(a): środa, 14 października 2009, 14:53
Lokalizacja: Rybnik/Wrocław
Podziękował : 43
Otrzymał podziękowań: 5
System operacyjny: Win 7 Ultimate 64bit SP1 / Ubuntu 19.04 LTS 64bit
Kompilator: Embarcadero RAD Studio XE2
SKYPE: pitek3010
Gadu Gadu: 7060047
    Windows XPFirefox

Re: Kod w C#

Nowy postprzez Cyfrowy Baron » czwartek, 18 listopada 2010, 14:48

Nie mogę sprawdzić tego brzęczka bo program do uruchomienia wymaga .NET Framework 4.0.3, a ja mam tylko wersję 3 i nie widzę póki co instalowania nowszej wersji.
Avatar użytkownika
Cyfrowy Baron
Administrator
Administrator
 
Posty: 4716
Dołączył(a): niedziela, 13 lipca 2008, 15:17
Podziękował : 12
Otrzymał podziękowań: 442
System operacyjny: Windows 7 x64 SP1
Kompilator: Embarcadero RAD Studio XE2
C++ Builder XE2 Update 4
SKYPE: cyfbar
Gadu Gadu: 0
    Windows XPFirefox

Re: Kod w C#

Nowy postprzez Pitek » czwartek, 18 listopada 2010, 15:14

Rozumie, a co do tego Console. to jak mam choćby to przekształcić ?
KOD cpp:     UKRYJ  
Console.Title = "The Matrix (Remember It's a Secret)";
Console.ForegroundColor = ConsoleColor.DarkGreen;
Console.WindowLeft = Console.WindowTop = 0;
Console.WindowHeight = Console.BufferHeight = Console.LargestWindowHeight;
Console.WindowWidth = Console.BufferWidth = Console.LargestWindowWidth;
Mam narazie coś takiego :
CPP:
KOD cpp:     UKRYJ  
#include "Program.h"

namespace matrix
        {

        void Program::Main(std::string args[])
                {
                Console->Title = "tH3 M7tr1x 3ff3";
                Console->ForegroundColor = ConsoleColor::DarkGreen;
                Console->WindowLeft = Console->WindowTop = 0;
                Console->WindowHeight = Console->BufferHeight = Console::LargestWindowHeight;
                Console->WindowWidth = Console->BufferWidth = Console::LargestWindowWidth;

        #if defined(readkey)
                std::cout << "H1T 7NY K3Y T0 C0NT1NU3 =/" << std::endl;
                Console::ReadKey();
        #endif

                Console->CursorVisible = false;
                int width, height;
                int[] y;
                int[] l;
                Initialize(width, height, y, l);
                int ms;

                while (true)
                        {
                        DateTime t1 = DateTime::Now;
                        MatrixStep(width, height, y, l);
                        ms = 10 - static_cast<int>((static_cast<TimeSpan>(DateTime::Now - t1))->TotalMilliseconds);

                        if (ms > 0)
                                delay(ms);

                        if (Console::KeyAvailable)
                                if (Console::ReadKey()->Key == ConsoleKey::F5)
                                        Initialize(width, height, y, l);
                        }
                }

        void Program::MatrixStep(int width, int height, int y[], int l[])
                {
                int x;
                thistime = !thistime;

                for (x = 0; x < width; ++x)
                        {
                        if (x % 11 == 10)
                                {
                                if (!thistime)
                                        continue;

                                Console->ForegroundColor = ConsoleColor::White;
                                }
                        else
                                {
                                Console->ForegroundColor = ConsoleColor::DarkGreen;
                                Console::SetCursorPosition(x, inBoxY(y[x] - 2 - (l[x] / 40 * 2), height));
                                std::cout << getR();
                                Console->ForegroundColor = ConsoleColor::Green;
                                }
                        Console::SetCursorPosition(x, y[x]);
                        std::cout << getR();
                        y[x] = inBoxY(y[x] + 1, height);
                        Console::SetCursorPosition(x, inBoxY(y[x] - l[x], height));
                        std::cout << ' ';
                        }
                }

        void Program::Initialize(int &width, int &height, int &y[], int &l[])
                {
                int h1;
                int h2 = (h1 = (height = Console::WindowHeight) / 2) / 2;
                width = Console::WindowWidth - 1;
                y = new int[width];
                l = new int[width];
                int x;
                Console->Clear();
                for (x = 0; x < width; ++x)
                        {
                        y[x] = r->Next(height);
                        l[x] = r->Next(h2 * ((x % 11 != 10) ? 2 : 1), h1 * ((x % 11 != 10) ? 2 : 1));
                        }
                }

        wchar_t Program::getR()
                {
                int t = r->Next(10);
                if (t <= 2)
                        return static_cast<wchar_t>('1' + r->Next(10));
                else if (t <= 4)
                        return static_cast<wchar_t>('b' + r->Next(27));
                else if (t <= 6)
                        return static_cast<wchar_t>('B' + r->Next(27));
                else
                        return static_cast<wchar_t>(r->Next(32, 255));
                }

        int Program::inBoxY(int n, int height)
                {
                n = n % height;
                if (n < 0)
                        return n + height;
                else
                        return n;
                }
        }

H:
KOD cpp:     UKRYJ  
#pragma once

#include <string>
#include <iostream>

//#define readkey


namespace matrix
        {
        class Program
                {
                static void Main(std::string args[]);

        private:
                static bool thistime;

                static void MatrixStep(int width, int height, int y[], int l[]);

                static void Initialize(int &width, int &height, int &y[], int &l[]);

                static Random *r = new Random();

                static wchar_t getR();

        public:
                static int inBoxY(int n, int height);
                };
        }

Masę błędów tu jest ale nie wiem co dalej :(
Komputer służy do tego aby ułatwić Ci pracę, której bez niego w ogóle byś nie miał.
E.Murphy
http://piotrekprogramy.pl
Avatar użytkownika
Pitek
Kreacjusz
Kreacjusz
 
Posty: 290
Dołączył(a): środa, 14 października 2009, 14:53
Lokalizacja: Rybnik/Wrocław
Podziękował : 43
Otrzymał podziękowań: 5
System operacyjny: Win 7 Ultimate 64bit SP1 / Ubuntu 19.04 LTS 64bit
Kompilator: Embarcadero RAD Studio XE2
SKYPE: pitek3010
Gadu Gadu: 7060047
    Windows XPFirefox

Re: Kod w C#

Nowy postprzez polymorphism » czwartek, 18 listopada 2010, 15:34

Rozumie

On/ona/ono rozumie, ja rozumiem.

a co do tego Console. to jak mam choćby to przekształcić ?

W zasadzie to nie musisz, to są ustawienia okna konsoli. Tak czy siak, z poziomu biblioteki standardowej tego nie zrobisz, musisz użyć funkcji WinAPI.


Co to w ogóle za program? Może zamiast przepisywać go z C# na C++, napisz po swojemu?
C++ Reference - opis wszystkich klas STL-a i funkcji C.
Avatar użytkownika
polymorphism
Doświadczony Programista ● Moderator
Doświadczony Programista ● Moderator
 
Posty: 2156
Dołączył(a): piątek, 19 grudnia 2008, 13:04
Podziękował : 0
Otrzymał podziękowań: 200
System operacyjny: Windows 8.1
Windows 10
Linux Mint 21.1
Kompilator: Visual Studio
Visual Studio Code
MSYS2 (MinGW, clang)
g++
clang
Gadu Gadu: 0
    Windows XPFirefox

Re: Kod w C#

Nowy postprzez Cyfrowy Baron » piątek, 19 listopada 2010, 10:53

Z analizy kodu wynika, że jedyne co robi ta klasa to wyświetlanie spadających znaków w konsoli, czyli efekt z filmu Matrix.
Avatar użytkownika
Cyfrowy Baron
Administrator
Administrator
 
Posty: 4716
Dołączył(a): niedziela, 13 lipca 2008, 15:17
Podziękował : 12
Otrzymał podziękowań: 442
System operacyjny: Windows 7 x64 SP1
Kompilator: Embarcadero RAD Studio XE2
C++ Builder XE2 Update 4
SKYPE: cyfbar
Gadu Gadu: 0
    Windows XPFirefox

Re: Kod w C#

Nowy postprzez polymorphism » piątek, 19 listopada 2010, 14:24

No faktycznie. W taki razie strumień cout na nic tu się nie przyda. Tu trzeba wykorzystać funkcje WinAPI do obsługi konsoli, ewentualnie napisać to jako zwykłą aplikację okienkową.
C++ Reference - opis wszystkich klas STL-a i funkcji C.
Avatar użytkownika
polymorphism
Doświadczony Programista ● Moderator
Doświadczony Programista ● Moderator
 
Posty: 2156
Dołączył(a): piątek, 19 grudnia 2008, 13:04
Podziękował : 0
Otrzymał podziękowań: 200
System operacyjny: Windows 8.1
Windows 10
Linux Mint 21.1
Kompilator: Visual Studio
Visual Studio Code
MSYS2 (MinGW, clang)
g++
clang
Gadu Gadu: 0
    Windows XPFirefox

Re: Kod w C#

Nowy postprzez Pitek » piątek, 19 listopada 2010, 16:13

Dokładnie jest to program w stylu matrix (spadające ciągi znaków). Chciałem przetłumaczyć ten kod na C++ ponieważ jest on bardzo efektowny a nie znalazłem odpowiednika w C++. Jest on również tak napisany w tym C# że ja nie umie go zinterpretować i napisać po swojemu głównie z braku znajomości tego języka.
Dlatego proszę o pomoc.

napisać to jako zwykłą aplikację okienkową

W jaki sposób, jakiego komponentu użyć?
Bardzo proszę o jakieś wskazówki.
Komputer służy do tego aby ułatwić Ci pracę, której bez niego w ogóle byś nie miał.
E.Murphy
http://piotrekprogramy.pl
Avatar użytkownika
Pitek
Kreacjusz
Kreacjusz
 
Posty: 290
Dołączył(a): środa, 14 października 2009, 14:53
Lokalizacja: Rybnik/Wrocław
Podziękował : 43
Otrzymał podziękowań: 5
System operacyjny: Win 7 Ultimate 64bit SP1 / Ubuntu 19.04 LTS 64bit
Kompilator: Embarcadero RAD Studio XE2
SKYPE: pitek3010
Gadu Gadu: 7060047
    Windows XPFirefox

Re: Kod w C#

Nowy postprzez polymorphism » piątek, 19 listopada 2010, 16:16

TPaintBox, TImage lub nawet główne okno.
C++ Reference - opis wszystkich klas STL-a i funkcji C.
Avatar użytkownika
polymorphism
Doświadczony Programista ● Moderator
Doświadczony Programista ● Moderator
 
Posty: 2156
Dołączył(a): piątek, 19 grudnia 2008, 13:04
Podziękował : 0
Otrzymał podziękowań: 200
System operacyjny: Windows 8.1
Windows 10
Linux Mint 21.1
Kompilator: Visual Studio
Visual Studio Code
MSYS2 (MinGW, clang)
g++
clang
Gadu Gadu: 0
    Windows XPFirefox

Następna strona

Powrót do Ogólne problemy z programowaniem

Kto przegląda forum

Użytkownicy przeglądający ten dział: Brak zalogowanych użytkowników i 6 gości