Re: C kód átfordítása C#-ba :)

Nits László nits at jedlik.eu
2014. Dec. 13., Szo, 18:21:57 CET


Szia Zsolti!

A következő kód hasonló, tesztelni nincs most időm :-)

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.IO;

namespace NumConverter
{
    public class BaseConverter
    {
        public string ToBase(string number, int start_base, int target_base)
        {
            return FromBase10(ToBase10(number, start_base), target_base);
        }

        int ToBase10(string number, int start_base)
        {

            if (start_base < 2 || start_base > 36) return 0;
            if (start_base == 10) return Convert.ToInt32(number);

            char[] chrs = number.ToCharArray();
            int m = chrs.Length - 1;
            int n = start_base;
            int x;
            int rtn = 0;

            foreach (char c in chrs)
            {
                if (char.IsNumber(c))  x = int.Parse(c.ToString());
                else x = Convert.ToInt32(c) - 55;
                rtn += x * (Convert.ToInt32(Math.Pow(n, m--)));
            }
            return rtn;
        }

        string FromBase10(int number, int target_base)
        {
            if (target_base < 2 || target_base > 36) return "";
            if (target_base == 10) return number.ToString();

            int n = target_base;
            int q = number;
            int r;
            string rtn = "";

            while (q >= n)
            {
                r = q % n;
                q = q / n;
                if (r < 10) rtn = r.ToString() + rtn;
                else rtn = Convert.ToChar(r + 55).ToString() + rtn;
            }

            if (q < 10) rtn = q.ToString() + rtn;
            else  rtn = Convert.ToChar(q + 55).ToString() + rtn;
            return rtn;
        }
    }
    class Program
    {
        static void Main()
        {
            string[] be = File.ReadAllText("be.txt").Split();
            int startBase = int.Parse(be[0]);
            int targetBase = int.Parse(be[1]);
            string num = be[2];
            BaseConverter bc = new BaseConverter();
            File.WriteAllText("ki.txt",bc.ToBase(num,startBase,targetBase));
        }
    }
}


2014. december 12. 12:50 Szalayné Tahy Zsuzsa írta, <sztzs at infokatedra.hu>:
>
> Miért?
>
> - Hibát keresel?
> - Meg kell tanulnod a C#-ot?
> - Meg kell tanulnod a C-t?
>
> Egy dolog, hogy valamit meg kellene érteni és egy másik, hogy írok egy
> oldal kódot, amiben minden nyelvi fordulat 3+-szor szerepel.
>
>
> SzTZs
>
> On Fri, Dec 12, 2014 at 12:28 PM, Zsolt Nagy <nagyzsolt80 at gmail.com>
> wrote:
>
>> Sziasztok!
>>
>> C kód:
>>
>> #include<stdio.h>
>>
>> int main()
>> {
>>  int a,cel,szamok[255],szamegesz=0,i=0,db=0,mar=0,hiba=0,x,q=1,j;
>>  char szam[255],szamkesz[255],a2;
>>  FILE * f;
>>  f=fopen("be.txt","rt");
>>  while (!feof(f))
>>  {
>>   fscanf(f,"%d %d %s",&a,&cel,szam);
>>  }
>>  fclose(f);
>>
>>  if (a<2 || a>36 || cel<2 || cel>36)
>>  {
>>   hiba=1;
>>  }
>>  else
>>     {
>>      if (a>=2 && a<=10) { //alap stringesítése
>>      a2=a+48-1;
>>                         }
>>  else if (a>=11 && a<=36) {
>>                         a2=a+55-1;
>>                           }
>>                 while (szam[i]!='\0') { //stringből egész tömb
>>                         if (szam[i]<'0' || szam[i]>a2 || szam[i]=='-') {
>>                                 hiba=1;
>>                                 break;
>>                         } else if (szam[i]>='A' && szam[i]<='Z') {
>>                                 szamok[i]=szam[i]-55;
>>                         } else if (szam[i]>='0' && szam[i]<='9') {
>>                                 szamok[i]=szam[i]-48;
>>                         }
>>                         db++;
>>                         i++;
>>                 }
>>                 db--;
>>         }
>>         f=fopen("ki.txt","wt");
>>         if (hiba==1) {
>>                 fprintf(f,"HIBA\n");
>>                 fclose(f);
>>                 return 0;
>>         } else if (db==0 && szamok[0]==0) {
>>                 fprintf(f,"0\n");
>>                 fclose(f);
>>                 return 0;
>>         } else {
>>                 for (i=0;i<=db/2;i++) { //helyiérték megfordítása
>>                         x=szamok[i];
>>                         szamok[i]=szamok[db-i];
>>                         szamok[db-i]=x;
>>                 }
>>                 for(i=0;i<=db;i++) { //dec-be
>>                         szamegesz+=szamok[i]*q;
>>                         q*=a;
>>                 }
>>                 if (cel==10) {
>>                         fprintf(f,"%d\n",szamegesz);
>>                         fclose(f);
>>                         return 0;
>>                 }
>>                 i=0; //cél számrendszerbe
>>                 while(szamegesz>0) {
>>                         mar=szamegesz%cel;
>>                         if (mar>=10 && mar<=35) {
>>                                 szamkesz[i]=mar+55;
>>                         } else {
>>                                 szamkesz[i]=mar+48;
>>                         }
>>                         szamegesz/=cel;
>>                         i++;
>>                 }
>>                 for(j=i-1;j>=0;j--) {
>>                         fprintf(f,"%c",szamkesz[j]);
>>                 }
>>                 fprintf(f,"\n");
>>                 fclose(f);
>>                 return 0;
>>         }
>>         return 0;
>> }
>>
>>
>>
>> segítenétek C#-ba tenni?
>>
>> Köszi
>>
>> Zsolt
>>
>>
>>
>> _______________________________________________
>> Techinfo mailing list
>> Techinfo at lista.sulinet.hu
>> Fel- és leiratkozás: http://lista.sulinet.hu/mailman/listinfo/techinfo
>> Illemtan: http://www.szag.hu/illemtan.html
>> Ügyfélszolgálat FAQ: http://sulinet.niif.hu/
>>
>>
> _______________________________________________
> Techinfo mailing list
> Techinfo at lista.sulinet.hu
> Fel- és leiratkozás: http://lista.sulinet.hu/mailman/listinfo/techinfo
> Illemtan: http://www.szag.hu/illemtan.html
> Ügyfélszolgálat FAQ: http://sulinet.niif.hu/
>
>
--------- következő rész ---------
Egy csatolt HTML állomány át lett konvertálva...
URL: <http://lista.sulinet.hu/pipermail/techinfo/attachments/20141213/b40b0a11/attachment.html>


További információk a(z) Techinfo levelezőlistáról