Szép napot az Uraknak! A problémám az lenne, hogy van egy program amit át kellene írnom C#-ról C++ba. Erőteljesen kezdő vagyok, hogy kezdjek neki, mit tegyek?
Ez lenne a program :
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.IO;
using System.Text.RegularExpressions;
namespace zene
{
class Szám
{
public int Csat { get; set; }
public int Minute { get; set; }
public int Sec { get; set; }
public string Azon { get; set; }
public Szám(string a)
{
string[] adat = new string[4];
char[] sep = { ' ' };
adat = a.Split(sep, 4);
Csat = Convert.ToInt32(adat[0]);
Minute = Convert.ToInt32(adat[1]);
Sec = Convert.ToInt32(adat[2]);
Azon = adat[3];
}
public long Kezd { get; set; }
}
class Program
{
static void Main(string[] args)
{
List<Szám>[] csatorna = new List<Szám>[3];
for (int i = 0; i < 3; i++)
{
csatorna = new List<Szám>();
}
#region 1. feladat - beolvasás
StreamReader be = new StreamReader("musor.txt");
int n = Convert.ToInt32(be.ReadLine());
for (int i = 0; i < n; i++)
{
Szám sz = new Szám(be.ReadLine());
csatorna[sz.Csat - 1].Add(sz);
}
be.Close();
for (int i = 0; i < 3; i++)
{
long eltelt = 0;
foreach (Szám sz in csatorna)
{
sz.Kezd = eltelt;
eltelt += sz.Minute * 60 + sz.Sec;
}
}
#endregion
#region 2. feladat - zeneszámok száma csatornánként
Console.WriteLine("2. feladat");
for (int i = 0; i < 3; i++)
{
Console.WriteLine("A(z) {0}.i csatornán {1} számot játszottak", i + 1, csatorna.Count());
}
#endregion
#region 3. feladat - E. Clampton időköz
Console.WriteLine("3. feladat");
Szám első = csatorna[0].Find(e => e.Azon.Contains("Eric Clapton:"));
Szám utolsó = csatorna[0].FindLast(e => e.Azon.Contains("Eric Clapton:"));
#region ez a megoldás nem tetszik, bár ötlet van benne
//Console.WriteLine(első.Azon);
//Console.WriteLine(utolsó.Azon);
//int hely = 0;
//Int64 idő = utolsó.Minute * 60 + utolsó.Sec;
//foreach (Szám sz in csatorna[0])
//{
// if (sz == első || sz== utolsó)
// {
// hely++;
// }
// if (hely == 1)
// {
// idő += sz.Minute * 60 + sz.Sec;
// }
//}
#endregion
Int64 idő = utolsó.Kezd + utolsó.Minute * 60 + utolsó.Sec - első.Kezd;
//int ó = (int)idő / 3600;
//int p = (int)(idő - ó * 3600) / 60;
//int m = (int)idő - ó * 3600 - p * 60;
DateTime ideje = new DateTime(idő*10000000);
Console.WriteLine("Az eltelt idő {0}", ideje.ToString("T"));
#endregion;
#region 4. feladat - ;
Console.WriteLine("4. feladat");
Szám omega = null;
int j = 0;
while ((omega == null) && (j<3))
{
omega = csatorna[j].Find(e => e.Azon.CompareTo("Omega:Legenda") == 0);
j++;
}
Console.WriteLine(omega.Kezd);
ideje = new DateTime(omega.Kezd*10000000);
Console.WriteLine("Az Omega száma a(z) {0}. csatornán szólt, kezdete {1}", omega.Csat, ideje.ToString("T"));
j--;
for (int i = 0; i < 3; i++)
{
if (i != j)
{
utolsó = csatorna.FindLast(e => e.Kezd < omega.Kezd);
Console.WriteLine("Ezalatt a(z) {0} csatornán {1} volt hallható", i+1, utolsó.Azon);
}
}
#endregion;
#region 5. feladat - Minta keresés RegEx
Console.WriteLine("5. feladat");
Console.Write("Adja meg a keresett karaktereket: ");
string sms = Console.ReadLine();
StreamWriter ki = new StreamWriter("keres.txt");
ki.WriteLine(sms);
string minta = ".*";
for (int i = 0; i < sms.Length; i++)
{
minta = minta + Convert.ToString(sms).ToLower()+ ".*";
}
Regex mint = new Regex(minta);
for (int i = 0; i < 3; i++)
{
foreach (Szám sz in csatorna)
{
if (mint.IsMatch(sz.Azon.ToLower()))
{
ki.WriteLine(sz.Azon);
Console.WriteLine(sz.Azon);
}
}
}
ki.Close();
#endregion
#region 6. feladat - dumapercek
Console.WriteLine("6. feladat");
long ujido = 180;
int hely = 3420;
foreach (Szám sz in csatorna[0])
{
if (hely < (sz.Minute*60+sz.Sec +60))
{
ujido += hely + 180;
hely = 3420;
}
ujido += sz.Minute * 60 + sz.Sec + 60;
hely -= sz.Minute * 60 + sz.Sec + 60;
}
ideje = new DateTime(ujido * 10000000);
Console.WriteLine("A műsor új ideje: {0}", ideje.ToString("T"));
#endregion
Console.ReadLine();
}
}
}
Na most ha teljesen kezdő vagy, akkor talán kissé nagy falat ez. Nyilván legalább a c++-t kellene ismerni olyan szinten, hogy a szükséges parancsokat tudd, hogy kell használni.
Ha meg ez van, akkor túl sok gondod nem lehet.
Szóval a kérdésedre, hogy hogyan kezdj neki és mit tégy a válasz: Az elejétől, soronként, és írd át c++-ra.
Olyan leírás biztos nincs, hogy hogyan írjunk át programot C#ból C++ba.
De ha ez sulis project, akkor nyisd ki a sulis jegyzeteket és kezdj el programozni nulláról.
Pár alap példaprogramot megírsz mindenféle dologra, megérted és máris magadtól össze tudod rakni magadtól az egész programot.
Ha ez nem jó, akkor 5000 ért megírom neked holnapra.
Az if az szerintem szelekció, nem ciklus...
Nagyon egyszerű, szerintem.
Ha ismered a nyelvet, le tudod írni, mit is csinál ez a program.
Utána az adott nyelv szabályai szerint újra kell alkotni.
Átírtam már néhány programot, igaz, nem C++-ba, hanem Adába, meg Javából C#-ba.
Először is kommentezd ki a tetején a Using-okat!
Utána cseréld le a Console.WriteLine-okat és a Console.Write-okat cout<<-ra! Kersed meg a Console.ReadLine() megfelelőjét, és helyettesítsd be!
A foreach-et írd át egyszerű for-rá!
Ez eddig a könnyebb rész.
Nézd meg, hogy intézi a konverziókat a C++, és ennek megfelelően javítsd át! A listák helyett használj vektort!
A legnehezebb az adatstruktúrák helyettesítése. Vagy megírod azokat az az osztályokat, amelyeket a C++ fordító hiányol, vagy behozod őket fejfájlokból. A vektorhoz is be kell hozni az stl-t.
Ezután már csak át kell javítani.
Kapcsolódó kérdések:
Minden jog fenntartva © 2024, www.gyakorikerdesek.hu
GYIK | Szabályzat | Jogi nyilatkozat | Adatvédelem | Cookie beállítások | WebMinute Kft. | Facebook | Kapcsolat: info(kukac)gyakorikerdesek.hu
Ha kifogással szeretne élni valamely tartalommal kapcsolatban, kérjük jelezze e-mailes elérhetőségünkön!