05 [FreeBASIC] - решаем задачи

8 days ago
in ru

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

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

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

Здесь нам понадобится три переменные 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
  • вычислить диагональ квадрата со стороной а
  • вычислить сторону квадрата если известна его диагональ
  • вычислить сторону квадрата если известна его площадь
Authors get paid when people like you upvote their post.
If you enjoyed what you read here, create your account today and start earning FREE SEREY!