05 FreeBASIC - первые простые задачки

3 месяца назад

В этот раз мы немного попрограммируем, порешаем некоторые, пока весьма маленькие, задачки, а заодно и разберёмся что к чему.

Начнём с простеньких задачек.

По заданному радиусу отпределить длину окружности и площадь круга.

Здесь нам понадобится три переменные R, S, l
#lang "qb"
R=17
l=2*3.1415*R
S=3.1415*R*R
print "R="; R; " S=";s;" l=";l
В конце программы нужно сделать паузу, чтобы увидеть результат
sleep
Если команда sleep без параметра, то программа остановится и будет ждать нажатия клавиши; с параметром - остановится на указанное количество миллисекунд.

Но чтобы решить задачу с другими данными нам нужно изменять каждый раз текст программы, пусть даже маленькую строку R=17. А не можно ли чтобы программа в процессе выполнения запрашивала нужные данные?

Для этого есть оператор INPUT
используется он так:
INPUT "подсказка"; переменная, переменная...
"Подсказка" - произвольный текст, где нужно обьяснить что и сколько параметров программа ожидает, далее идёт одна или несколько переменных.

Перепишем вторую строку - вместо R=17 напишем
INPUT "введите величину радиуса"; R

Теперь можно не изменяя текст программы запускать её много раз и она выдаст результат для разных значений радиуса.

Лучше всё-таки перейти на FreeBASIC)) для этого прийдется ипользуемые переменные объявлять в начале программы, и определять их тип.
В некоторых системах при выполнении программы вместо русских букв, кириллицы, отображаются непонятные символы. А функции для корректного отображения кириллицы есть во FreeBASIC, для этого и убираем директиву #lang "qb", а в начале программы нужно написать две строки #include "windows.bi" и
SetConsoleCP(1251) : SetConsoleOutputCP(1251)
Или если используете
#lang "qb" тогда нужно вместо кириллических символов использовать латинские, транслитерацией - vot tak. И всё равно при копировании текста программы из этого окна и вставке его в fbIDE кириллические символы не переносятся, нужно русский текст перенабрать заново

Вычислить площадь треугольника по трем его сторонам.

Площадь вычисляется по формуле Герона.


а квадратный корень на FreeBASIC - sqr

в программе нам понадобятся пять вещественных переменных, a,b,c - стороны, промежуточная(вспомогательная) переменная - p для полупериметра, и S - для результата, сохранения пощади треугольника
Dim as single a,b,c,p,s
INPUT "введите длины сторон треугольника"; a,b,c

теперь нужно вычислить полупериметр
p=(a+b+c)/2
саму площадь -
s=sqr(p*(p-a)*(p-b)*(p-c))
и вывести результат на экран

print "Треугольник со сторонами ";a;", ";b;" и ";c;" имеет площадь s=";s
sleep

#include "windows.bi"
SetConsoleCP(1251)
SetConsoleOutputCP(1251)
Dim as single a,b,c,p,s
INPUT "введите длины сторон треугольника"; a,b,c
p=(a+b+c)/2
s=sqr(p*(p-a)*(p-b)*(p-c))
print "Треугольник со сторонами ";a;", ";b;" и ";c;" имеет площадь s=";s
sleep

Давайте запишем данное трехзначное число задом наперёд, т.е. если у нас дано 678 программа должна вывести 876

Задачу решим двумя способами
Значала чистой математикой))
input "введите трехзначное число"; a
первой цифрой будет a1=int(a/100)`` второйa2=int(a-a1*100)/10а третья как остаток от деления на 10a3= a mod 10`

а второй способ через строки(символьные переменные)
сначала преобразуем число в строку
astr=str(a)
переь возьмем из поученной строки astr симол справа, посредине и слева и запишем их в новую строку
rez=right(astr,1)+mid(astr,2,1)+left(a,1)
и преобразуем строку rez в число
r=val(rez)

Давайте например определим, тысяча секунд - сколько это? А миллион?

возьмём сначала тысячу секунд
's = 1000',
чтобы узнать сколько здесь минут разделим s на 60
'm = s \ 60'.
Деление мы выберем целочисленное, ведь нам нужно узнать количество полных минут.
А в переменную c запишем остаток, сколько секунд осталось
'c = s mod 60'
Но минут может ведь тоже оказаться слишком много, больше 60 во всяком случае. Поэтому такие же действия произведём и с минутами выделяя из них часы.
'h = m \ 60'
и запишем теперь в минуты оставшиеся не полные минуты
'm = m mod 60'
Далее может оказаться что и часов получилось слишком много))) выделяем из них дни
'd = h \ 24'
а назад в h запишем остаток
'h = h mod 24'
За количество дней в месяце возьмём 30
Так как переменная m занята под минуты мы для переменной под месяц возьмём ms
'ms = d \30'
В d же записываем остаток
'd = d mod 30'
Осталось вывеси результат
'print s;" секунд - это ";ms;" месяцев ";d;" дней ";h;" часов ";m;" минут ";c;" секунд"'

Dim As LongInt s,m,c,h,d,ms,y
s = 1000000000
m = s \ 60
c = s mod 60
h = m \ 60
m = m mod 60
d = h \ 24
h = h mod 24
ms = d \30
d = d mod 30
y=ms\12
ms=ms mod 12
print s;"секунд это ";y;"год ";ms;"месяц ";d;"день ";h;"часов ";m;"минут ";c;"секунд"
sleep

Очень многие удивляются тому зачению которое означает миллион секунд)))

Решая указанные выше задачи можна было столкнуться с некорректными данными, например, когда вместо трехзначного числа человек сознательно или допустив ошибку вводит двух- или четырехзначное число. А в задаче на формулу Герона можно ввести такие стороны треугольника с которым не существует.
Как же быть?
Нужно как то анализировать вводимые данные - об этом в следующих уроках.

предлагаю самим решить такие задачи

  • записать четырехзначное число задом наперёд: 1205 -> 5021
  • сделать из трехзначного числа число такого вида: 158 -> 15851
  • вычислить диагональ квадрата со стороной а
  • вычислить сторону квадрата если известна его диагональ
  • вычислить сторону квадрата если известна его площадь

04 FreeBasic - графика
03 FreeBASIC. Текстовые переменные и операции с ними
02 FreeBASIC Переменные в Бейсике
01 Начинаем изучать FreeBasic
00 FreeBASIC лучший из диалектов бейсика

@sergiy

Авторы получают вознаграждение, когда пользователи голосуют за их посты.
Голосующие читатели также получают вознаграждение за свой голос.
Порядок сортировки:  Популярное
32
  ·  3 месяца назад

Сюда приплывал Моби Дик