VB + Real + pascal

Программирование на Visual Basic, главный форум. Обсуждение тем программирования на VB 1—6.
Даже если вы плохо разбираетесь в VB и программировании вообще — тут вам помогут. В разумных пределах, конечно.
Правила форума
Темы, в которых будет сначала написано «что нужно сделать», а затем просьба «помогите», будут закрыты.
Читайте требования к создаваемым темам.
5190
Начинающий
Начинающий
 
Сообщения: 16
Зарегистрирован: 17.05.2005 (Вт) 14:17

VB + Real + pascal

Сообщение 5190 » 02.03.2006 (Чт) 1:22

Знаете в VB есть всё: есть integer, double, single... НО в нём нету real'a, почему и как исправить? Мне нужно простенькую задачку из паскаля в VB перевести и ничего путного из-за отсутствия real'a не получается.

паскаль:
Код: Выделить всё
   var
      x, y :real;

begin
   writeln('enter X:');
   readln(x);
   y := sin(x);
   writeln('sin x = ',y:40);
readln;


PS никто не знает как истолковать y:40 в бэйсике?

tyomitch
Пользователь #1352
Пользователь #1352
Аватара пользователя
 
Сообщения: 12822
Зарегистрирован: 20.10.2002 (Вс) 17:02
Откуда: חיפה

Сообщение tyomitch » 02.03.2006 (Чт) 1:59

замени real на Double, и всё у тебя получится
Изображение

5190
Начинающий
Начинающий
 
Сообщения: 16
Зарегистрирован: 17.05.2005 (Вт) 14:17

Сообщение 5190 » 02.03.2006 (Чт) 9:37

хорошо, а как быть с y:40 - это отвечает за то, что для вывода переменной y отводится 40 позиций, хотелось бы также красиво, как и в паскале.

5190
Начинающий
Начинающий
 
Сообщения: 16
Зарегистрирован: 17.05.2005 (Вт) 14:17

Сообщение 5190 » 02.03.2006 (Чт) 10:07

Ничего путного не полцчилось кстате, я пробовал уже и doouble и прочие варианты. Например лёгкий код на паскале:

Код: Выделить всё
   var
      x, y :real;

begin
   writeln('enter X:');
   readln(x);
   y := sin(x);
   writeln('sin x = ',y);
readln;


(я убрал y:40, оставил просто y)

теперь переписал его на VB

Код: Выделить всё
Dim x, y As Double
x = CDbl(Text1.Text)
y = Sin(x)
Text2.Text = CStr(y)


Результаты работы: вводим 1 в откомпилированную паскалевскую прогу, получаем:
8,41470984807529E-0001


ввожим 1 в откомпилированную VB прогу, получаем:
0,841470984807897

GB826
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 312
Зарегистрирован: 04.08.2005 (Чт) 0:58
Откуда: Планета #3

Сообщение GB826 » 02.03.2006 (Чт) 10:14

Результаты работы: вводим 1 в откомпилированную паскалевскую прогу, получаем:
8,41470984807529E-0001


ввожим 1 в откомпилированную VB прогу, получаем:
0,841470984807897


А в чем разница? Кроме представления, да и вообще второй вариант мне больше нравицца.

Если у тя оконное приложение, зачем тут форматированный вывод?
Пора уже всем хорошим людям собраться и убить всех плохих людей.

5190
Начинающий
Начинающий
 
Сообщения: 16
Зарегистрирован: 17.05.2005 (Вт) 14:17

Сообщение 5190 » 02.03.2006 (Чт) 10:26

GB826, понимаешь в чём прикол, не мне это нужно если б себе я бы оставил всё как есть, но необходимо получить результат в точности повторяющий результат работы ппаскалевской проги.

Faust
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 649
Зарегистрирован: 29.12.2003 (Пн) 13:38
Откуда: лаборатория

Сообщение Faust » 02.03.2006 (Чт) 10:43

real - отстой! Результат, который тебе выдал VB, просто точнее.
ЗЫ. Правда, насколько я помню, стандартные тригонометрические ф-ции Паскаля используют именно real... Но если найдешь варианты, работающие с типом extended, используй его.
Листинги не горят!

tyomitch
Пользователь #1352
Пользователь #1352
Аватара пользователя
 
Сообщения: 12822
Зарегистрирован: 20.10.2002 (Вс) 17:02
Откуда: חיפה

Сообщение tyomitch » 02.03.2006 (Чт) 12:03

5190 писал(а):хорошо, а как быть с y:40 - это отвечает за то, что для вывода переменной y отводится 40 позиций, хотелось бы также красиво, как и в паскале.

Вопрос-то в чём? Как добить пробелами строку до 40 символов?
Код: Выделить всё
Text2.Text = Right(Space(40) & y, 40)
Изображение

5190
Начинающий
Начинающий
 
Сообщения: 16
Зарегистрирован: 17.05.2005 (Вт) 14:17

Сообщение 5190 » 02.03.2006 (Чт) 18:26

Господа, я так понимаю, что никто не знает способа превращения числа в необходимый мне вид? Это же ужас, я не верю в такое. Почему pascal высчитывает это чило так, а VB по другому...

Viper
Артефакт VBStreets
Артефакт VBStreets
Аватара пользователя
 
Сообщения: 4394
Зарегистрирован: 12.04.2005 (Вт) 17:50
Откуда: Н.Новгород

Сообщение Viper » 02.03.2006 (Чт) 18:32

На один пост выше своего последнего посмотри+глянь на справку функции Format. С ее помощью число можно вывести в любом виде, хоть с вышивкой цветочками вокруг :D
Весь мир матрица, а мы в нем потоки байтов!

5190
Начинающий
Начинающий
 
Сообщения: 16
Зарегистрирован: 17.05.2005 (Вт) 14:17

Сообщение 5190 » 02.03.2006 (Чт) 18:44

Да нет же, тут дело уже даже не в сорока символах. Просто дело в том, как мне выше объяснили, что VB считает мой синус точнее и у него получается просто какое-то большое число. А вот паскаль, выдаёт со степенью 8.4 .... E-0001. Вот в этом и заключается тупость, я не понимаю, почему VB не может выдать в паскалевском формате? Неужто такие проблемы только у меня.

Viper
Артефакт VBStreets
Артефакт VBStreets
Аватара пользователя
 
Сообщения: 4394
Зарегистрирован: 12.04.2005 (Вт) 17:50
Откуда: Н.Новгород

Сообщение Viper » 02.03.2006 (Чт) 18:56

Тебе надо чтоб было выведоно в виде 8.4...E-0001? Ессли да, то команда Format. Представление числа в памяти не меняется от того как его выести на экран...

А вот если тебе надо чтоб число вычислялось с паскалевской точностью то тогда не судьба...
Последний раз редактировалось Viper 02.03.2006 (Чт) 19:19, всего редактировалось 1 раз.
Весь мир матрица, а мы в нем потоки байтов!

tyomitch
Пользователь #1352
Пользователь #1352
Аватара пользователя
 
Сообщения: 12822
Зарегистрирован: 20.10.2002 (Вс) 17:02
Откуда: חיפה

Сообщение tyomitch » 02.03.2006 (Чт) 19:16

Код: Выделить всё
Debug.Print Format(Sin(1), "0.00000000000000E-0000")
Изображение

alibek
Большой Человек
Большой Человек
 
Сообщения: 14205
Зарегистрирован: 19.04.2002 (Пт) 11:40
Откуда: Russia

Сообщение alibek » 02.03.2006 (Чт) 19:23

* с ностальгией вспоминая PRINT USING... :) *
Lasciate ogni speranza, voi ch'entrate.

Faust
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 649
Зарегистрирован: 29.12.2003 (Пн) 13:38
Откуда: лаборатория

Сообщение Faust » 03.03.2006 (Пт) 10:16

5190 писал(а):Вот в этом и заключается тупость, я не понимаю, почему VB не может выдать в паскалевском формате?

Faust писал(а):real - отстой!

Не иначе, Вирту было божественное откровение, когда он решил включить в состав поддерживаемых Паскалем типов данных этого монстра (чтобы понять, почему я так отношусь к этому формату, можешь почитать, как он устроен). Я не знаю других языков, где бы поддерживался его аналог. VB - не исключение. Так что "дословно" перевести твой код с Pascal на VB не удастся.
Листинги не горят!


Вернуться в Visual Basic 1–6

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

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

    TopList