2014 dxdy logo

Научный форум dxdy

Математика, Физика, Computer Science, Machine Learning, LaTeX, Механика и Техника, Химия,
Биология и Медицина, Экономика и Финансовая Математика, Гуманитарные науки




Начать новую тему Ответить на тему На страницу Пред.  1, 2, 3  След.
 
 Re: Решение квадратных уравнений на C#
Сообщение10.09.2014, 12:36 
Аватара пользователя


13/04/14
133
Тюмень
warlock66613 в сообщении #906172 писал(а):
Dr.RichardFeynman в сообщении #906170 писал(а):
Я так понял, что Progger советовал избежать этого.
Нет, он советовал избегать приведения типов - это когда тип пишется в круглых скобочках - (double) например. Злоупотребление этим - действительно плохая практика, потому что ведёт к появлению трудноустанимых ошибок в работе программы.

т.е. переходить от одного типа(string же не тип?) к другому - нормально?

Кажется, вот так считает и при b=0, и при c=0.

код: [ скачать ] [ спрятать ]
Используется синтаксис C#
using System;

public class Equation
{
    static void Main()
    {
        double d, xone, xtwo;
        String a_string, b_string, c_string;
        Console.WriteLine("Введите значение a:");
        a_string = (Console.ReadLine());
        double a = double.Parse(a_string);
        Console.WriteLine("Введите значение b:");
        b_string = (Console.ReadLine());
        double b = double.Parse(b_string);
        Console.WriteLine("Введите значение c:");
        c_string = (Console.ReadLine());
        double c = double.Parse(c_string);
        d = b * b - 4 * a * c;
        xone = (-b + Math.Sqrt(d)) / (2 * a);
        xtwo = (-b - Math.Sqrt(d)) / (2 * a);
        double xthree = Math.Sqrt(-(a / c));
        if (d >= 0) Console.Write("Корни квадратного уравнения: "+ xone + ", "+ xtwo);
        else if (b == 0) Console.Write("Корни квадратного уравнения: " + xthree);
        else Console.Write("Квадратное уравнение не имеет решений");
    }
}

 Профиль  
                  
 
 Re: Решение квадратных уравнений на C#
Сообщение10.09.2014, 13:13 
Заслуженный участник
Аватара пользователя


30/01/06
72407
Dr.RichardFeynman в сообщении #906140 писал(а):
И, да, я заметил, что код повторяется, и знал, что так не делается.

Делается. Исправлять это - занятие куда более продвинутое и профессиональное, чем тот этап, на котором вы сейчас находитесь. Отложите на потом.

-- 10.09.2014 14:15:55 --

Dr.RichardFeynman в сообщении #906170 писал(а):
Как тогда можно получить значения для a,b и c, без парсинга? Я так понял, что Progger советовал избежать этого.

1. Никак.
2. Можно их просто ввести в тексте программы, правда, программа потеряет интерактивность, и всегда будет вычислять корни одного и того же уравнения. Впрочем, для учебных программ вашего уровня - можно сделать так, чтобы не париться. А то получается неудобно.
3. Можно их считывать из файла, но это на самом деле не проще, чем парсинг, просто другая мутатень.

warlock66613 в сообщении #906172 писал(а):
Нет, он советовал избегать приведения типов - это когда тип пишется в круглых скобочках - (double) например.

Вот вы бы объяснили человеку доходчиво, почему приведение типов приведением называется, а парсинг - не называется.

 Профиль  
                  
 
 Re: Решение квадратных уравнений на C#
Сообщение10.09.2014, 16:45 
Аватара пользователя


13/04/14
133
Тюмень
Кстати, отвлечемся от этой программы. Если мне нужно, чтобы программа брала информацию из другого источника, например текстового файла или таблицы, то этот источник будет называться базой данных? А если источник - вебсайт, на котором есть таблица, которая содержит самую последнюю информацию? В общем, я хочу чтобы программа выводила значения с этого сайта. Зачем? Просто на сайте каждый раз нужно вводить id, и что бы за пользователя это делала программа. Сложно ли это реализовать?

 Профиль  
                  
 
 Re: Решение квадратных уравнений на C#
Сообщение10.09.2014, 16:52 
Заслуженный участник
Аватара пользователя


30/01/06
72407
Dr.RichardFeynman в сообщении #906261 писал(а):
Сложно ли это реализовать?

Да, офигенно сложно.

 Профиль  
                  
 
 Re: Решение квадратных уравнений на C#
Сообщение10.09.2014, 17:00 
Аватара пользователя


13/04/14
133
Тюмень
Munin в сообщении #906265 писал(а):
Dr.RichardFeynman в сообщении #906261 писал(а):
Сложно ли это реализовать?

Да, офигенно сложно.

RLY? Или это сарказм? :?

 Профиль  
                  
 
 Re: Решение квадратных уравнений на C#
Сообщение10.09.2014, 17:11 
Заслуженный участник
Аватара пользователя


30/01/06
72407
RLY. То, что вы перечисляете - большие и сложные системы (базы данных, интернет и веб-сайты), работа с которыми - доступна только достаточно опытным программистам, через средства тоже больших и сложных программных библиотек. Иногда эти системы имеют "облегченный доступ", например, для веб-сайтов - есть специальные скриптовые языки для веб-программирования, типа Perl, PHP, Python, Ruby. Но C# к таким не относится.

-- 10.09.2014 18:15:41 --

Работа с текстовым файлом (который ≠ база данных) - самое простое из вами перечисленного, и тоже требует отдельного вникания. Если вы хотите разбирать таблицу не в текстовом файле, например, таблицу Excel, то это снова офигенно сложная (для вас) задача, хотя к счастью, всё-таки библиотеки для этого есть - начиная с формата xlsx (формат xls был закрытым, и его приходилось "взламывать", ненадёжно и с шансами потери информации).

 Профиль  
                  
 
 Re: Решение квадратных уравнений на C#
Сообщение10.09.2014, 18:14 
Заслуженный участник
Аватара пользователя


06/10/08
6422
Dr.RichardFeynman в сообщении #906261 писал(а):
Просто на сайте каждый раз нужно вводить id, и что бы за пользователя это делала программа. Сложно ли это реализовать?
Ну, все не так страшно, но пока все-таки не Ваш уровень.

Есть библиотеки, которые позволяют работать с сайтами достаточно просто. Но все равно надо знать как минимум что такое сайт: что происходит в сети, когда Вы вводите id и как выглядят те данные, которые браузер отображает как таблицу.

-- Ср сен 10, 2014 19:17:40 --

Munin в сообщении #906272 писал(а):
Иногда эти системы имеют "облегченный доступ", например, для веб-сайтов - есть специальные скриптовые языки для веб-программирования, типа Perl, PHP, Python, Ruby.
Насколько я понял, задача взять данные с сайта, а не написать сайт. Те языки, про которые Вы говорите, используются для серверной части, а клиенты пишутся примерно одинаково сложно на любом языке, библиотеки везде есть.

Munin в сообщении #906272 писал(а):
всё-таки библиотеки для этого есть - начиная с формата xlsx (формат xls был закрытым, и его приходилось "взламывать", ненадёжно и с шансами потери информации).
С таблицами Excel можно было работать через установленный MS Office через COM.

 Профиль  
                  
 
 Re: Решение квадратных уравнений на C#
Сообщение10.09.2014, 18:27 
Аватара пользователя


13/04/14
133
Тюмень
Всем спасибо.
Друг посоветовал поднять планку - написать змейку) Дерзну

 Профиль  
                  
 
 Re: Решение квадратных уравнений на C#
Сообщение10.09.2014, 18:34 
Заслуженный участник
Аватара пользователя


30/01/06
72407
Интерактивные игрушки - это снова куча возни с библиотеками, но теперь уже - вывода на экран и ввода с клавиатуры (небуферизованного). Друг вам дал плохой совет. Вообще, вам стоит вначале долго тренироваться на задачах, сложных внутренне, но не использующих сложный ввод/вывод.

 Профиль  
                  
 
 Re: Решение квадратных уравнений на C#
Сообщение10.09.2014, 19:09 
Аватара пользователя


31/10/08
1244
Dr.RichardFeynman
Для вас это пока очень сложно. Так как пока что вы не знаете ничего.
Вам надо научиться основам программирования.

Изучить базовые типы данных. Прочитать про выражения, условные операторы, циклы, сложные(составные) типы, функции, машины состояний, рекурсия.
Потом про пошаговою отладку в вашей среде разработки. Затем про работу с файлами и стандартными средствами ввода вывода. А вот после про структуры данных: вектора, списки, деревья, графы, хэш таблицы.

В хорошем учебники почти всё это есть. Возможно надо будет два-три учебника.

А вот потом уже можете приступать к изучению библиотек, алгоритмов и способов работы с базами данных. И тем как сделать ввод ID.

А так советую начать с основ. Ведь в вашем коде, что выше очень много ошибок.

 Профиль  
                  
 
 Re: Решение квадратных уравнений на C#
Сообщение10.09.2014, 20:58 
Аватара пользователя


31/10/08
1244
Munin
Munin в сообщении #906191 писал(а):
warlock66613 в сообщении #906172
писал(а):
Нет, он советовал избегать приведения типов - это когда тип пишется в круглых скобочках - (double) например.
Вот вы бы объяснили человеку доходчиво, почему приведение типов приведением называется, а парсинг - не называется.

Так он по моему доходчиво всё и объяснил.

Приведение это термин у которого есть определение. Конвертирование типов делиться на явное и неявное. Явное конвертирование типов делится на два способа. Это преобразование при помощи приведения типа и преобразование при помощи функций, или процедур, или методов.
Определение приведение выглядит как следующее грамматическое правило "( тип ) переменная". Скобки выделены жирным стилем. Жирные стилям выделены терминальные слова, обще принятое обозначение.

На данном этапе обучения автору темы может и не знать такие детали. Хотя автор мог бы уже прочитать учебник и найти в нем объяснения. При обучение нельзя всё сразу рассказать. А вот немного забегать в перёд приходится как учителю так и ученику.

Dr.RichardFeynman в сообщении #906179 писал(а):
т.е. переходить от одного типа(string же не тип?) к другому - нормально?

Да тип. И да это нормально, но идеологически не верно, с точки зрения создателей С#. И как тут уже сказали идеология заключается в уменьшение вероятности появления ошибок.

 Профиль  
                  
 
 Re: Решение квадратных уравнений на C#
Сообщение10.09.2014, 21:47 
Заслуженный участник
Аватара пользователя


30/01/06
72407
Pavia в сообщении #906429 писал(а):
Так он по моему доходчиво всё и объяснил. Приведение это термин у которого есть определение...

Вы тут излагаете синтаксические отличия, а я хотел, чтобы вы объяснили смысловые.

В общем, идея такая. int - это тип, и string - это тип. Но это типы, предназначенные для хранения разных данных: в int - число, а в string - строка символов. Строка символов не обязательно содержит число, например, "Петя".

Приведением типов называется такое изменение типа, при котором смысл данных сохраняется, а меняется только тип. Например, можно привести целое число к типу "дробное", и тогда вместо значения 2 будет значение 2.0. И то и другое - одинаковое число, только в видах, предназначенных для хранения в переменных разного типа. Часто приведения типов вообще "незаметны" для программиста, например, умножение можно записать и как 2.0*3.14, и как 2*3.14 - во втором случае, сначала целое число будет преобразовано в дробное, а потом выполнится умножение двух дробных чисел.

А вот числа и строки - вещи по сути разные и каким-то умолчательным способом между собой не совместимые. Например, строка может содержать дробное число "3.14", и непонятно, что делать, если хочется прочитать целое число. Строка может содержать список чисел, скобки, запятые, да может и вообще чисел не содержать. Поэтому, превращение строки в число - это отдельная сложная процедура, считывание (parsing). И наоборот, число можно превратить в строку разными способами: печатать или не печатать знак, сколько печатать цифр после запятой, как выровнять экспоненту. Это тоже делается отдельной процедурой (хотя не такой сложной).

 Профиль  
                  
 
 Re: Решение квадратных уравнений на C#
Сообщение14.09.2014, 19:44 
Заслуженный участник


06/07/11
5627
кран.набрать.грамота
Munin в сообщении #906455 писал(а):
Приведением типов называется такое изменение типа, при котором смысл данных сохраняется, а меняется только тип. Например, можно привести целое число к типу "дробное", и тогда вместо значения 2 будет значение 2.0. И то и другое - одинаковое число, только в видах, предназначенных для хранения в переменных разного типа.
То, о чем вы говорите - это скорее неявное преобразование "целого" типа в "дробный". Приведение - это предложение компилятору считать переменную одного типа другим типом. Например, в паскале:
Код:
var
  a: char;
  b: byte;
begin
  a:= 'a';
  b:= byte(a);
  writeln(b);
end;
В переменной b окажется значение ASCII-кода буквы "а", то есть 65. Переменная а имеет тип char (1 байт), переменная b имеет тип byte (тоже 1 байт). Смысл операции приведения в том, что контроль типов не даст поместить в числовую переменную строковое значение, а тут вы как бы говорите компилятору - "представь, что это не строка, а число".
Насколько я понимаю, приведение типов наиболее полезно в ООП, когда можно, например, создать функцию, принимающую объекты некоторого класса, а потом передавать в нее объекты и этого класса, и его потомков, а функция уже сама будет определять их тип и использовать приведение для обработки объектов.

 Профиль  
                  
 
 Re: Решение квадратных уравнений на C#
Сообщение14.09.2014, 21:34 
Заслуженный участник
Аватара пользователя


30/01/06
72407
rockclimber в сообщении #907766 писал(а):
То, о чем вы говорите - это скорее неявное преобразование "целого" типа в "дробный". Приведение - это предложение компилятору считать переменную одного типа другим типом.

Есть и такой вариант. Как что называть - нюансы терминологии, в которые я лезть не хочу. Кому надо - тот уточнит.

 Профиль  
                  
 
 Re: Решение квадратных уравнений на C#
Сообщение15.09.2014, 19:27 
Заслуженный участник


02/08/11
6874
rockclimber в сообщении #907766 писал(а):
Приведение - это предложение компилятору считать переменную одного типа другим типом.
В Cи и то и другое - приведение (cast), причём синтаксически нельзя одно отличить от другого. В С++ и то другое - приведение (cast), но одно - это static_cast, а другое - reinterpret_cast. В C# (по крайней мере в safe коде) reinterpret_cast'ов нет, и все приведения - это именно неявные преобразования.

 Профиль  
                  
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 32 ]  На страницу Пред.  1, 2, 3  След.

Модераторы: Karan, Toucan, PAV, maxal, Супермодераторы



Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group