4 İşlem

  1. KısayolKısayol reportŞikayet pmÖzel Mesaj
    iQsuz
    iQsuz's avatar
    Kayıt Tarihi: 21/Nisan/2008
    Erkek

    ajan1111 bunu yazdı:
    -----------------------------

    iqsuz bunu yazdı:
    -----------------------------

    ajan olaydı çakardı cevabı iki dakkada


    -----------------------------

    gördüm konuyuda biraz dağılmıştı mevzuu.

    vbasic olaydı bi şekilde yapılırdı ama .net istiyor ;)

     

    text'in her karakteri tek tek kontrol edilir.

    selstart'la toplam karakter. mid komutuylada "(" karakteri kontrol edilir.

    for i=1 to text1.selstart

    if mid(text1.text,1,i)="(" then

    a=mid(text1.text,1,i+1)

    b=mid(text1.text,1,i+3)

    if mid(text1.text,1,i+4)=")" then exit for

    c=mid(text1.text,1,i+5)

    d=a mid(text1.text,1,i+2) b mid(text1.text,1,i+4)

    end if

    next i

     

    not: yazdıklarım vbasic 6.0 için. ezberden hatırladığım kadarıyla yazdım. yazım veya mantık hatası olabilir. eksikte olabilr.  ama kabataslak böyle bişey olurdu.



    Mesaj 22 Temmuz 2012 (Pazar) Saat: 03:08'da ajan1111 tarafından düzenlendi.
    -----------------------------

    demiştim siker geçer diye:)

     

  2. KısayolKısayol reportŞikayet pmÖzel Mesaj
    unbalanced
    unbalanced's avatar
    Kayıt Tarihi: 14/Haziran/2006
    Erkek

    iqsuz bunu yazdı:
    -----------------------------

    ......

    demiştim siker geçer diye:)

     

    -----------------------------

     

    :) söylemek istememiştim ama kurduğu mantık yanlış, her zaman en içteki parenteze göre çözülüp geriye doğru ya da ileriye doğru açılma yapılmalıdır. mesela 

    ( .... + ....* (.... * (.....+...)/ ... + ....) ....  ) gibi işlemde çöker mantığı. o yüzden ilk başta ) parentezini bulup ondan sonra geriye gidip ( arayıp ikisi arasındaki işlemi

    çözmek gerekli.. zamanım olursa bunun örneğini vb.net ya da c# için yaparım

     

     

    Mesaj 22 Temmuz 2012 (Pazar) Saat: 16:14'da unbalanced tarafından düzenlendi.

    Ülkesini Seven Her Türk Vatandasi, Ülkesinin Sessiz Istilasi'na karsi durmak zorunda.
  3. KısayolKısayol reportŞikayet pmÖzel Mesaj
    YeniHarman
    YeniHarman's avatar
    Kayıt Tarihi: 17/Haziran/2012
    Erkek

    Zamanın birinde VB6 kullanarak benzer bir şey yapmıştım.

     

    - Doğru çalışan kısımlar:

    1) Parantezler doğru ele alınıyor.

    2) İşlem önceliğine dikkat ediliyor.

    3) Parantez sayısı + 1 (fazladan bir yinelemeyi de biz ekliyoruz. Kısaca ifadenin tamamı parantez içinde olmak zorunda, kodlara baktığınızda göreceksiniz) öz yineleme yapıyor.

    4) Geri kalan işlemler iterasyon ile gerçekleşiyor. Dinamik bellek yönetimi yerine hedef ifade parçalarının işi biten kısımları "b" olarak işaretleniyor. Karmaşıklık logaritmik azalıyor.

    5) Eşit önceliğe sahip işleçler soldan sağa yapılıyor (bu şekilde yazdığımı hatırlıyorum). 

     

    - Yapamadıkları (ve hataları):

    1) Tekli işleç desteklenmiyor. Örneğin (4 + -1) ifadesini çözemiyor olması lazım. Yalnız istediğiniz şey için sorun çıkarmayacaktır.

    2) Parantez içindeki tek ifadeler (örneğin (5)) doğru hesaplanmıyor.

    3) Parantez işaretlerinin tam olmadığı durumlar (unbalanced parantheses, örneğin "( 4 +4 * (4*4)") yakalanmıyor. Fakat ufak bir değişiklikle yakalanması kolay.

    4) Herhangi bir hata yakalama mekanizması mevcut değil.

     

    Proje kodları burada: http://speedy.sh/C5Fdb/mathexpr.rar

    Mesaj 22 Temmuz 2012 (Pazar) Saat: 21:59'da YeniHarman tarafından düzenlendi.

    Olaylara karışmayın!
  4. KısayolKısayol reportŞikayet pmÖzel Mesaj
  5. KısayolKısayol reportŞikayet pmÖzel Mesaj
    Cali_KuSu
    Cali_KuSu's avatar
    Kayıt Tarihi: 04/Mayıs/2010
    Dişi

    parantez olması zorunlu değil ki c# da zaten ekranda parantez gösteripte işlem yaptırmak biraz mesele. ordaki parantezler işlemi bölmek neyin nerde ne iş yapacağını göstermek amacıyla konulmuş sanırım. dört tane textboxun içine farklı sayılar yazılıyor bunların ilk ikisi toplanıyor o toplamın sonucu ücüncüyle çıkarılıyor ve dördünc textboxa bölünüyor . bunlar da tek butana basınca oluyor :) muş..

    c# dışında bir dillede yapılır ancak benim diğer dillerde program yazacak kadar bilgim yok...

  6. KısayolKısayol reportŞikayet pmÖzel Mesaj
    Gizem
    sLeymN
    sLeymN's avatar
    Kayıt Tarihi: 31/Mart/2008
    Erkek

    ağaç yapısını araştır müride (: 

    al hatta tam olarak konuyu anlatan slayt sana (: veri yapıları konularını araştırarak bulabilirsin

    http://logicalarea.com/img/8.ppt


    Cehennemin dibine kadar yolum var daha.. || Nasılsa her yalnız kendine sürgündür Asmera unutma.
  7. KısayolKısayol reportŞikayet pmÖzel Mesaj
    Tarikat Şeyhi
    HolyOne
    HolyOne's avatar
    Kayıt Tarihi: 01/Haziran/2002
    Erkek

    http://www.c-sharpcorner.com/uploadfile/mgold/codedomcalculator08082005003253am/codedomcalculator.aspx

    Bunu kullanarak bahsettiğin şeyi aşşağıdaki gibi component haline getirmiştim. kullanışlı.

    Değişken olayını kapsadığını sanmıyorum

     

    using System;
    using System.Collections.Generic;
    using System.Text;
    using System.Windows.Forms;
    using System.CodeDom.Compiler;
    using System.Collections;
    using System.Text.RegularExpressions;
    using System.Reflection;
    using Microsoft.CSharp;
    using System.IO;
    using System.CodeDom;
    
    namespace HolyOne.Controls
    {
       public  class MathTextBox:TextBox
        {
           /*
            ICodeCompiler CreateCompiler()
            {
                //Create an instance of the C# compiler   
                CodeDomProvider codeProvider = null;
                codeProvider = new CSharpCodeProvider();
                ICodeCompiler compiler=   codeProvider.CreateCompiler();
                return compiler;
            }
    
            */
        CSharpCodeProvider loCompiler = new CSharpCodeProvider();//.CreateCompiler();
     
    
            ///
            /// Creawte parameters for compiling
            ///
            ///
            CompilerParameters CreateCompilerParameters()
            {
                //add compiler parameters and assembly references
                CompilerParameters compilerParams = new CompilerParameters();
                compilerParams.CompilerOptions = "/target:library /optimize";
                compilerParams.GenerateExecutable = false;
                compilerParams.GenerateInMemory = true;
                compilerParams.IncludeDebugInformation = false;
                compilerParams.ReferencedAssemblies.Add("mscorlib.dll");
                compilerParams.ReferencedAssemblies.Add("System.dll");
                compilerParams.ReferencedAssemblies.Add("System.Windows.Forms.dll");
    
                //add any aditional references needed
                //            foreach (string refAssembly in code.References)
                //              compilerParams.ReferencedAssemblies.Add(refAssembly);
    
                return compilerParams;
            }
    
    
            string RefineEvaluationString(string eval)
            {
                // look for regular expressions with only letters
                Regex regularExpression = new Regex("[a-zA-Z_]+");
    
                // track all functions and constants in the evaluation expression we already replaced
                ArrayList replacelist = new ArrayList();
    
                // find all alpha words inside the evaluation function that are possible functions
                MatchCollection matches = regularExpression.Matches(eval);
                foreach (Match m in matches)
                {
                    // if the word is found in the math member map, add a Math prefix to it
                    bool isContainedInMathLibrary = _mathMembersMap[m.Value.ToUpper()] != null;
                    if (replacelist.Contains(m.Value) == false && isContainedInMathLibrary)
                    {
                        eval = eval.Replace(m.Value, "Math." + _mathMembersMap[m.Value.ToUpper()]);
                    }
    
                    // we matched it already, so don't allow us to replace it again
                    replacelist.Add(m.Value);
                }
    
                // return the modified evaluation string
                return eval;
            }
    
    
            public string  LastError { get; set; }
            void InitializeFields()
            {
             //   Value = "";
                LastError = "";
            }
    
    
            ///
            /// Compiles the c# into an assembly if there are no syntax errors
            ///
            ///
            private CompilerResults CompileAssembly()
            {
                // create a compiler
               // ICodeCompiler compiler = CreateCompiler();
                // get all the compiler parameters
                CompilerParameters parms = CreateCompilerParameters();
                // compile the code into an assembly
    
               CompilerResults results = loCompiler.CompileAssemblyFromSource(parms, _source.ToString());
              //  CompilerResults results = CompileCode(compiler, parms, _source.ToString());
                return results;
    
            }
            protected override void OnKeyDown(KeyEventArgs e)
            {
                if (e.KeyCode == Keys.Return)
                    try
                    {
                        this.Text = Value.ToString();
                        this.SelectionStart = this.Text.Length;
                    }
                    catch (Exception)
                    {
                        
                    }
                    
                    base.OnKeyDown(e);
            }
           [System.ComponentModel.DefaultValue(false)]
            public bool CalculateOnEnter { get; set; }
    
            ///
            /// Compiles the code from the code string
            ///
            ///
            ///
            ///
            ///
            private CompilerResults CompileCode(ICodeCompiler compiler, CompilerParameters parms, string source)
            {
                //actually compile the code
                CompilerResults results = compiler.CompileAssemblyFromSource(
                                            parms, source);
    
                //Do we have any compiler errors?
                if (results.Errors.Count > 0)
                {
                    foreach (CompilerError error in results.Errors)
                        Console.WriteLine("MathCode Compile Error:" + error.ErrorText);
                    return null;
                }
    
                return results;
            }
    
     
    
            private void Calculate()
            {
                // Blank out result fields and compile result fields
                InitializeFields();
    
                // change evaluation string to pick up Math class members
                string expression = RefineEvaluationString(this.Text);
    
                // build the class using codedom
                BuildClass(expression);
    
                // compile the class into an in-memory assembly.
                // if it doesn't compile, show errors in the window
                CompilerResults results = CompileAssembly();
    
                Console.WriteLine("...........................\r\n");
                Console.WriteLine(_source.ToString());
    
                // if the code compiled okay,
                // run the code using the new assembly (which is inside the results)
                if (results != null && results.CompiledAssembly != null)
                {
                    // run the evaluation function
                    RunCode(results);
                }
                else
                {
                }
            }
    
            ArrayList _mathMembers = new ArrayList();
            Hashtable _mathMembersMap = new Hashtable();
    
            void GetMathMemberNames()
            {
                // get a reflected assembly of the System assembly
                Assembly systemAssembly = Assembly.GetAssembly(typeof(System.Math));
                try
                {
                    //cant call the entry method if the assembly is null
                    if (systemAssembly != null)
                    {
                        //Use reflection to get a reference to the Math class
    
                        Module[] modules = systemAssembly.GetModules(false);
                        Type[] types = modules[0].GetTypes();
    
                        //loop through each class that was defined and look for the first occurrance of the Math class
                        foreach (Type type in types)
                        {
                            if (type.Name == "Math")
                            {
                                // get all of the members of the math class and map them to the same member
                                // name in uppercase
                                MemberInfo[] mis = type.GetMembers();
                                foreach (MemberInfo mi in mis)
                                {
                                    _mathMembers.Add(mi.Name);
                                    _mathMembersMap[mi.Name.ToUpper()] = mi.Name;
                                }
                            }
                            //if the entry point method does return in Int32, then capture it and return it
                        }
    
    
                        //if it got here, then there was no entry point method defined.  Tell user about it
                    }
                }
                catch (Exception ex)
                {
                    Console.WriteLine("Error:  An exception occurred while executing the script", ex);
                }
            }
            private double calcresultdbl = 0;
     
            public double Value
            {
                get
                {
    
                   Calculate();
                   return calcresultdbl;
            } }
           /**
            public string   ValueStr
            {
                get
                {
    
                    Calculate();
                    return calcresultflt;
                }
            }
           */
            
    
            private void WriteLine(string txt, params object[] args)
            {
                string lst = string.Format(txt, args); ;
                LastError = lst;
                
            }
    
            ///
            /// Runs the Calculate method in our on-the-fly assembly
            ///
            ///
            private void RunCode(CompilerResults results)
            {
                Assembly executingAssembly = results.CompiledAssembly;
                try
                {
                    //cant call the entry method if the assembly is null
                    if (executingAssembly != null)
                    {
                        object assemblyInstance = executingAssembly.CreateInstance("ExpressionEvaluator.Calculator");
                        //Use reflection to call the static Main function
    
                        Module[] modules = executingAssembly.GetModules(false);
                        Type[] types = modules[0].GetTypes();
    
                        //loop through each class that was defined and look for the first occurrance of the entry point method
                        foreach (Type type in types)
                        {
                            MethodInfo[] mis = type.GetMethods();
                            foreach (MethodInfo mi in mis)
                            {
                                if (mi.Name == "Calculate")
                                {
                                    object result = mi.Invoke(assemblyInstance, null);
                                    calcresultdbl = (double)result;
                                    LastError = "";
                                  //  calcresultflt =  result.ToString();
                                }
                            }
                        }
    
                    }
                }
                catch (Exception ex)
                {
                    WriteLine("Error:  An exception occurred while executing the script", ex);
                }
    
            }
    
    
            CodeMemberField FieldVariable(string fieldName, string typeName, MemberAttributes accessLevel)
            {
                CodeMemberField field = new CodeMemberField(typeName, fieldName);
                field.Attributes = accessLevel;
                return field;
            }
            CodeMemberField FieldVariable(string fieldName, Type type, MemberAttributes accessLevel)
            {
                CodeMemberField field = new CodeMemberField(type, fieldName);
                field.Attributes = accessLevel;
                return field;
            }
    
            ///
            /// Very simplistic getter/setter properties
            ///
            ///
            ///
            ///
            /// 
            CodeMemberProperty MakeProperty(string propertyName, string internalName, Type type)
            {
                CodeMemberProperty myProperty = new CodeMemberProperty();
                myProperty.Name = propertyName;
                myProperty.Comments.Add(new CodeCommentStatement(String.Format("The {0} property is the returned result", propertyName)));
                myProperty.Attributes = MemberAttributes.Public;
                myProperty.Type = new CodeTypeReference(type);
                myProperty.HasGet = true;
                myProperty.GetStatements.Add(
                    new CodeMethodReturnStatement(
                        new CodeFieldReferenceExpression(new CodeThisReferenceExpression(), internalName)));
    
                myProperty.HasSet = true;
                myProperty.SetStatements.Add(
                    new CodeAssignStatement(
                        new CodeFieldReferenceExpression(new CodeThisReferenceExpression(), internalName),
                        new CodePropertySetValueReferenceExpression()));
    
                return myProperty;
            }
    
           public MathTextBox()
           {
         //      InitializeComponent();
               GetMathMemberNames();  // track all members of the math namespace
           }
    
    
    
    
           StringBuilder _source = new StringBuilder();
    
           /// 
           /// Main driving routine for building a class
           /// 
           void BuildClass(string expression)
           {
               // need a string to put the code into
               _source = new StringBuilder();
               StringWriter sw = new StringWriter(_source);
    
               //Declare your provider and generator
               CSharpCodeProvider codeProvider = new CSharpCodeProvider();
               ICodeGenerator generator = codeProvider.CreateGenerator(sw);
               CodeGeneratorOptions codeOpts = new CodeGeneratorOptions();
    
               CodeNamespace myNamespace = new CodeNamespace("ExpressionEvaluator");
               myNamespace.Imports.Add(new CodeNamespaceImport("System"));
               myNamespace.Imports.Add(new CodeNamespaceImport("System.Windows.Forms"));
    
               //Build the class declaration and member variables			
               CodeTypeDeclaration classDeclaration = new CodeTypeDeclaration();
               classDeclaration.IsClass = true;
               classDeclaration.Name = "Calculator";
               classDeclaration.Attributes = MemberAttributes.Public;
               classDeclaration.Members.Add(FieldVariable("answer", typeof(double), MemberAttributes.Private));
    
               //default constructor
               CodeConstructor defaultConstructor = new CodeConstructor();
               defaultConstructor.Attributes = MemberAttributes.Public;
               defaultConstructor.Comments.Add(new CodeCommentStatement("Default Constructor for class", true));
               defaultConstructor.Statements.Add(new CodeSnippetStatement("//TODO: implement default constructor"));
               classDeclaration.Members.Add(defaultConstructor);
    
               //property
               classDeclaration.Members.Add(this.MakeProperty("Answer", "answer", typeof(double)));
    
               //Our Calculate Method
               CodeMemberMethod myMethod = new CodeMemberMethod();
               myMethod.Name = "Calculate";
               myMethod.ReturnType = new CodeTypeReference(typeof(double));
               myMethod.Comments.Add(new CodeCommentStatement("Calculate an expression", true));
               myMethod.Attributes = MemberAttributes.Public;
               myMethod.Statements.Add(new CodeAssignStatement(new CodeSnippetExpression("Answer"), new CodeSnippetExpression(expression)));
               //            myMethod.Statements.Add(new CodeSnippetExpression("MessageBox.Show(String.Format(\"Answer = {0}\", Answer))"));
               myMethod.Statements.Add(
                   new CodeMethodReturnStatement(new CodeFieldReferenceExpression(new CodeThisReferenceExpression(), "Answer")));
               classDeclaration.Members.Add(myMethod);
               //write code
               myNamespace.Types.Add(classDeclaration);
               generator.GenerateCodeFromNamespace(myNamespace, sw, codeOpts);
               sw.Flush();
               sw.Close();
           }
        }
    }
    
    Mesaj 23 Temmuz 2012 (Pazartesi) Saat: 12:58'da HolyOne tarafından düzenlendi.

    Nush ile uslanmayanı etmeli tekdir, Tekdir ile uslanmayanın hakkı kötektir!
  8. KısayolKısayol reportŞikayet pmÖzel Mesaj
    Cali_KuSu
    Cali_KuSu's avatar
    Kayıt Tarihi: 04/Mayıs/2010
    Dişi

    a (label)  |     16      | (tekxtBox)

    b (label)  |       7      | (tekxtBox)

    c (label)  |       3      | (tekxtBox)

    d (label)  |      4      | (tekxtBox)

    Formül (label)  |   (a+b-c)/d   | (tekxtBox)

     

    hesapla (button)   : 5 (label)

     

    görüntü böyle olacak 

     

     

  9. KısayolKısayol reportŞikayet pmÖzel Mesaj
    HoLyCat
    HoLyCat's avatar
    Kayıt Tarihi: 03/Ekim/2009
    Erkek

    Up Muride kardesimize yardim.


    🆃🅰🅷🆁🅸🅱🅰🆃.🅲🅾🅼
  10. KısayolKısayol reportŞikayet pmÖzel Mesaj
    Cali_KuSu
    Cali_KuSu's avatar
    Kayıt Tarihi: 04/Mayıs/2010
    Dişi


    resimdeki formul kısmına kullanıcı tarafından girilen değerleri programın okuyup işlem yapması gerekiyor kod kısmına tanımladığımızda sadece orda tanımlanan formule işlem yapıyor. ancak kullanıcı farklı formuller girdiğindede o girilen formule göre işlem yapacak .. nasıl yapabilirim?


    ekran görüntüsü bu linkte 
    http://a6.sphotos.ak.fbcdn.net/hphotos-ak-ash3/557325_3594490388029_1271683623_n.jpg 

Toplam Hit: 5650 Toplam Mesaj: 39