Ето и решението на задачата от предишната публикация на Microsoft Basic, която без проблем можете да компилирате на Правец
10 HOME
20 PRINT "-------PROGRAMA ZA RESHAVANE NA KVADRATNI URAVNENIQ-------"
30 PRINT "VAVEDETE A "
40 INPUT A
50 PRINT "VAVEDETE B "
60 INPUT B
70 PRINT "VAVEDETE C "
80 INPUT C
90 D=B^2-4*A*C
100 PRINT "DISCRIMINANTATA E RAVNA NA ",D
110 IF D<0 THEN PRINT "DISKRIMINANTATA E OTRICATELNA ZATOVA URAVNENIETO NQMA RESHENIE"
130 IF D=0 THEN GOTO 200
140 X1 = ((-B)-SQR(D))/(2*A)
150 X2 = ((-B)+SQR(D))/(2*A)
160 PRINT "X1 = ",X1
170 PRINT "X2 = ",X2
180 GOTO 210
190 X = -B/(2*A)
200 PRINT "DISCRIMINANTATA E RAVNA NA NULA ZATOVA URAVNENIETO IMA EDNO RESHENIE: ",X
210 PRINT "EXIT"
неделя, 11 април 2010 г.
петък, 9 април 2010 г.
Квадратно уравнение
Поради скуката която ме налегна, днес реших да сравня езиците за програмиране които съм ползвал до сега и едно сравнително ново отроче в семейството на езиците за програмиране, а именно F# и по-специално Visual F# 2010. Тъй като навсякъде първата програма, която пишат програмистите и я дават като стандарт за първа програма "Hello World", аз преди няколко години реших моята първа програма на всеки нов език който реша да прегледам да е "Решаване на квадратно уравнение", затова тук ще съпоставя тази програма написана на всички езици, с които поради някаква причина съм се сблъсквал до сега като започна от Pascal, мина през C++,C#,Visual Basic и завърша с F#. В този списък са пропуснати обикновения Basic - който се оказа тотално забравен от мен и Assembler на който писах тази програма, но не мога да открия, а нямам сили да я пиша отново, затова ако я намеря и нея ще добавя. А сега да започна с Pascal (Реално сега е компилирана на CodeGear Delphi 2009):
program Project1;
{$APPTYPE CONSOLE}
uses
SysUtils;
var
a,b,c,D,x1,x2:real;
begin
write('Vavedete a= ');
readln(a);
write('Vavedete b= ');
readln(b);
write('Vavedete c= ');
readln(c);
D:= b*b-4*a*c;
writeln('Diskriminantata e ravna na: ',D);
if D<0>
begin
writeln('Diskriminantata e otricatelna zatova uravnenieto nqma reshenie!');
end
else if D=0 then
begin
x1:=-b/(4*a);
writeln('Diskriminantata e nula zatova uravnenieto ima edno reshenie: x= ',x1);
end
else
begin
x1 := (-b+sqrt(D))/(4*a);
x2 := (-b-sqrt(D))/(4*a);
writeln('x1 = ',x1);
writeln('x2 = ',x2);
end;
end.
A ето и кода на програмата на C++:
#include "stdafx.h"
#include
#include
using namespace std;
void main()
{
cout <<"Vavedete a = ";
double a;
cin >> a;
cout <<"Vavedete b = ";
double b;
cin >> b;
cout <<"Vavedete c = ";
double c;
cin >> c;
double d = b*b-4*a*c;
cout <<"Diskriminantata e: "<<<'\n';
if(d<0)
{
cout <<"Diskriminantata e otricatelna zatova uravnenieto niama reshenie!\n";
}
else if (d==0)
{
cout <<"Diskriminantata e nula zatowa uravnenieto ima edno reshenie: x="<<(-b)/(4*a)<<'\n';;
}
else
{
cout <<"x1 = "<<((-b)+sqrt(d))/(4*a)<<'\n';
cout <<"x2 = "<<((-b)-sqrt(d))/(4*a)<<'\n';
}
}
Следва C#:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace ConsoleApplication3
{
class Program
{
static void Main(string[] args)
{
Console.Write("Въведете а =");
double a = Double.Parse(Console.ReadLine());
Console.Write("Въведете b =");
double b = Double.Parse(Console.ReadLine());
Console.Write("Въведете c =");
double c = Double.Parse(Console.ReadLine());
double d = b * b - 4 * a * c;
Console.WriteLine("Дискриминантата е: " + d.ToString());
if (d <>
{
Console.WriteLine("Дискриминантата е отрицателна затова уравнението няма решение");
}
else if (d == 0)
{
Console.WriteLine("Дискриминантата е равна на нула затова има само едно решение: x=" + ((-b) / (4 * a)).ToString());
}
else
{
Console.WriteLine("x1=" + ((-b + Math.Sqrt(d)) / (4 * a)).ToString());
Console.WriteLine("x2=" + ((-b - Math.Sqrt(d)) / (4 * a)).ToString());
}
}
}
}
A сега Visual Basic:
Module Module1
Sub Main()
Console.Write("Въведете а = ")
Dim a As Double = Double.Parse(Console.ReadLine())
Console.Write("Въведете b = ")
Dim b As Double = Double.Parse(Console.ReadLine())
Console.Write("Въведете c = ")
Dim c As Double = Double.Parse(Console.ReadLine())
Dim D As Double = b ^ 2 - 4 * a * c
Console.WriteLine("Дискриминантата е равна на: " + D.ToString())
If (D <>
Console.WriteLine("Дискриминантата е отрицателна затова уравнението няма решение")
ElseIf (D = 0) Then
Console.WriteLine("Дискриминантата е равна на нула затова има само едно решение: x=" + ((-b) / (4 * a)).ToString())
Else
Console.WriteLine("x1=" + ((-b + Math.Sqrt(D)) / (4 * a)).ToString())
Console.WriteLine("x2=" + ((-b - Math.Sqrt(D)) / (4 * a)).ToString())
End If
End Sub
End Module
Да преминем сега и към F#:
open System
open System.Collections.Generic
open System.Text
Console.Write("Въведете a = ");
let a:Double = Double.Parse(Console.ReadLine())
Console.Write("Въведете b = ")
let b:Double = Double.Parse(Console.ReadLine())
Console.Write("Въведете c = ")
let c:Double = Double.Parse(Console.ReadLine())
let D: Double = (b*b)-(4.0*a*c)
Console.WriteLine ("D = "+D.ToString())
if D<0.0>
Console.WriteLine("Детерминантата е отрицателна и уравнението няма решение")
else if D=0.0 then
Console.WriteLine("Дискриминантата е равна на нула затова има само едно решение: x="+((-b)/(4.0*a)).ToString())
else
Console.WriteLine ("x1 = "+((-b+sqrt(D))/(4.0*a)).ToString())
Console.WriteLine ("x2 = "+((-b-sqrt(D))/(4.0*a)).ToString())
Както виждате между всички езици за програмиране, на които съм писал една и съща програма има доста съществена връзка, например C++ и C# начина на писане на код (като изключим викането на библиотеки при C++ и именитите пространства (namespace) в C#) е доста идентично - декларацията на променливите, начините на писане на класове, операндите са почти еднакви (е има и доста разлики cin>>a - a=Console.Read(); cout<<"Text" - Console.Write("Text")). Visual C#, Visual Basic, Visual F# май има най голяма прилика при писането на код в тези езици, което най-вероятно се дължи на това че и трите са отрочета на Microsoft.
Засега новоизлюпилия се език F# не ме е грабнал, кой знае колко, но ми направи впечатление че мога пропускам типа на променливата при декларирането й (let а:int = 10 е еднакво с let a = 10), другаде не можах (поне засега) да намеря съществени разлики при писането на код. Подразни ме, че не мога на променлива от тип double да присвоя стойността от математическите операции на променливи от тип int.
Етикети:
Квадратни уравнения,
Програмиране,
C#,
C++,
F#,
Pascal,
Visual Basic
Абонамент за:
Публикации (Atom)