В
Все
М
Математика
О
ОБЖ
У
Українська мова
Х
Химия
Д
Другие предметы
Н
Немецкий язык
Б
Беларуская мова
М
Музыка
Э
Экономика
Ф
Физика
Б
Биология
О
Окружающий мир
У
Українська література
Р
Русский язык
Ф
Французский язык
П
Психология
О
Обществознание
А
Алгебра
М
МХК
Г
География
И
Информатика
П
Право
А
Английский язык
Г
Геометрия
Қ
Қазақ тiлi
Л
Литература
И
История
ekimmail631
ekimmail631
04.04.2020 09:04 •  Информатика

Разработайте проект, в котором у пользователя вашей программы сначала запрашиваются величины трех сторон треугольника а, b, c, а затем вычисляется площадь
этого треугольника по формуле Герона:
полупериметр.
Пример. Ввод с клавиатуры:
Введите сторону а: 18
Введите сторону b: 11
Введите сторону c: 15
ответ:
Площадь треугольника равна: 82.31646…


Разработайте проект, в котором у пользователя вашей программы сначала запрашиваются величины трех ст

Показать ответ
Ответ:
coopersmith
coopersmith
27.02.2022 17:31

Объяснение:

C++Выделить код

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

43

44

45

46

47

48

49

50

51

52

53

54

55

/*

*Лабораторная работа: 7.

*Тема: Строки и файлы. Организация работы со строками и файлами.

*Пункт: 5.2. Файловый тип данных.

*Файл: Lab07_YaP_2019_1S.pdf

*

*Язык: C++.

*Среда: Microsoft Visual Studio 2019 v16.3.0.

*Платформа: x64.

*Изменение: 06.01.2020.

*

*Вариант: 13.

*Защита: 15.11.2019.

*Задание: БН. Написать программу, которая считывает Английский текст из файла и выводит его на экран, заменив каждую первую букву слов,

*     начинающихся с гласной буквы, на прописную.

*/

#include <iostream>                                                        // Треб. для SETLOCATE, PRINTF, GETLINE, STRLEN, CIN, COUT. //

#include <fstream>                                                         // Требуется для FSTREAM. //

#include "Header.h"

void main () {

    setlocale (LC_ALL, "Russian");

    char SourceArray [Dimension + 1] = " ";                               // SOURCEARRAY [100] = 101 (для "\0"). //

    char LettersArray [Dimension - 72] = " ";                             // [0]..[25] = 1..26 (для ввода с клавиатуры), [26] = 27

    char PathTextFile [Dimension + 1] = " ";                              // (для "\0"). //

    printf ("1. Латинский алфавит (26 букв): a, b, c, d, e, f, g, h, i, j, k, l, m, n, o, p, q, r, s, t, u, v, w, x, y, z.\n\n2. Введите"

         " путь и имя файла (до %d символов, включительно): ", Dimension);

    cin.getline (PathTextFile, Dimension);

    fstream TextFile (PathTextFile, ios::trunc | ios::in | ios::out);     // TRUNC - создание, IN - режим записи, OUT - режим чтения. //

    if (!TextFile) {

         MessageFunction ();                                              // Выводится на экран, если файл открыть не удалось. //

    }

    printf ("\n3. Введите строчные Латинские буквы, которые следует заменить на прописные (до %d символов, включительно):\n\n",

         Dimension - 73);

    cin.getline (LettersArray, Dimension - 72);

    if (strlen (LettersArray) < 1) {

         TextFile.close ();                                               // Закрытие файла. //

         MessageFunction ();

    }

    printf ("\n4. Введите строку (до %d символов, включительно):\n\n", Dimension);

    cin.getline (SourceArray, Dimension);

    if (strlen (SourceArray) < 1) {

         TextFile.close ();                                               // Закрытие файла. //

         MessageFunction ();

    }

    TextFile << SourceArray;                                              // Запись SOURCEARRAY в файл. //

    TextFile.close ();                                                    // Закрытие файла. //

    ChangeFunction (LettersArray, PathTextFile);

    printf ("\n5. Исходная строка после замены:\n\n");

    WriteArrayFunction (PathTextFile);

    remove (PathTextFile);                                                // Удаление файла. //

    cout << endl << endl;

    ExitProgramFunction ();

}

0,0(0 оценок)
Ответ:
АУЕшник2281337
АУЕшник2281337
14.10.2020 04:14

Получается, зависит от последних цифр возраста:

1) "лет" -если последняя цифра 0,5,6,7,8,9 или две цифры 05÷20

а остальные (не попавшие в первое условие) именуются так:

2) "год" -если последняя цифра 1

3) "года" -если последняя цифра 2,3,4

Вот несколько вариантов программы (проверял в PascalABC.NET 3.4.2.1837, и часть программ будет работать только там):

1) Вариант с самыми простыми и известными операторами (для начинающих и для совместимости с другими версиями Pascal). Поэтому: используются только if-then-else, составной оператор (блок) begin-end, операции сравнения, обычные ввод и вывод, и переменные типов integer и string; не используются логические операции. Правда, есть операции нахождения остатка от деления на 10 и на 100 (n mod 10  и  n mod 100). Если вы их не проходили, то остаток можно вычислять, используя функции, возвращающие целую часть числа:  n-Int(n/10)*10  и  n-Int(n/100)*100  или  n-Trunc(n/10)*10  и  n-Trunc(n/100)*100.  Всё это нужно для получения последней цифры числа (или двух последних цифр).

var

n: integer;

s: string;

begin

write('Введите возраст: ');

read(n);

if n < 0 then write('Недопустимый возраст.') else

if n > 120 then write('Недопустимый возраст.') else

begin

s := ' лет.';

if n mod 10 >= 2 then

if n mod 10 <= 4 then s := ' года.';

if n mod 10 = 1 then s := ' год.';

if n mod 100 >= 5 then

if n mod 100 <= 20 then s := ' лет.';

write('Вам ', n, s);

end;

end.

2) Вариант с использованием оператора выбора (case) и диапазонов значений. Я начинал с этого варианта, и тут я записал все диапазоны значений возраста до 120 лет (я не вспомнил общих правил написания лет-год-года в зависимости от количества лет, поэтому перебрал все возраста, проверяя написание на слух :)

Здесь и далее использована переменная типа byte (целые значения от 0 до 255, размер 1 байт). Если использовать тип integer, то по идее надо проверять на отрицательные значения, которые возможны при вводе для этого типа. Хотя, можно конечно считать, что вводить будут всегда правильно, и делать проще - не проверять это вообще (тогда пойдёт и integer). Если так упрощать, то можно не проверять и на возраст больше 120 лет.

Кроме byte, с той же целью можно использовать word (2 байта, 0..65535) или longword (4 байта, 0..4294967295), если вы их проходили. Правда, они слегка избыточны для этой задачи.

var n: byte;

begin

write('Введите возраст: ');

read(n);

case n of 0,5..20,25..30,35..40,45..50,55..60,65..70,75..80,85..90,95..100,105..120: write('Вам ',n,' лет.');

1,21,31,41,51,61,71,81,91,101: write('Вам ',n,' год.');

2..4,22..24,32..34,42..44,52..54,62..64,72..74,82..84,92..94,102..104: write('Вам ',n,' года.');

else write('Недопустимый возраст.');

end;

end.

2а) В той же программе часть условий можно не писать (тут в проверке используется максимальное значение для типа byte, поэтому если менять тип, то нужно менять и это значение):

var n: byte;

begin

write('Введите возраст: ');

read(n);

case n of

121..255: write('Недопустимый возраст.');

1,21,31,41,51,61,71,81,91,101: write('Вам ',n,' год.');

2..4,22..24,32..34,42..44,52..54,62..64,72..74,82..84,92..94,102..104: write('Вам ',n,' года.');

else write('Вам ',n,' лет.');

end;

end.

3) Тут остаток от деления на 10 проверяется на принадлежность  к множеству указанных остатков. Ещё, есть логическая операция (or):

var n: byte;

begin

write('Введите возраст: ');

read(n);

if n>120 then write('Недопустимый возраст.') else

if (n mod 10 in [0,5..9]) or (n mod 100 in [5..20]) then write('Вам ',n,' лет.') else

if n mod 10 = 1 then write('Вам ',n,' год.') else write('Вам ',n,' года.')

end.

4) И напоследок, вариант с условной операцией (условие ? выражение1 : выражение2), конвертацией из строки в byte (и прочими непотребствами :)  Лишние пробелы ужаты, поэтому всё не очень читаемо.

begin

var n:=byte.Parse(ReadString('Введите возраст:'));

write('Вам ',n>120?'многовато лет':n+' '+((n mod 10in[5..9,0])or(n mod 100in[5..20])?'лет':n mod 10=1?'год':'года'),'.')

end.

Отдельно, строка с выводом (более читаемо, без ужатия пробелов):

write('Вам ', n>120 ? 'многовато лет' : n + ' ' + ((n mod 10 in [5..9,0]) or (n mod 100 in [5..20]) ? 'лет' : n mod 10 = 1 ? 'год' : 'года'), '.')

Хотя, если перенести пробел и точку в сами сообщения, то строка даже чуть короче станет:

write('Вам ', n>120 ? 'многовато лет.' : n + ((n mod 10 in [5..9,0]) or (n mod 100 in [5..20]) ? ' лет.' : n mod 10 = 1 ? ' год.' : ' года.'))

0,0(0 оценок)
Популярные вопросы: Информатика
Полный доступ
Позволит учиться лучше и быстрее. Неограниченный доступ к базе и ответам от экспертов и ai-bota Оформи подписку
logo
Начни делиться знаниями
Вход Регистрация
Что ты хочешь узнать?
Спроси ai-бота