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

До ть Спортсмен на тренуванні ставить собі за мету пробігти певну кількість кілометрів, підраховуючи після кожного круга, чи не пора припинити тренування. Виберіть тип циклу, який найбільше підходить для вирішення задачі.
а) цикл з короткою умовою
б) цикл з параметром
в) цикл з складною умовою

Показать ответ
Ответ:
АленаКамарова
АленаКамарова
26.03.2023 08:33

Объяснение:

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 оценок)
Ответ:
olgagolos
olgagolos
20.09.2021 18:44

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

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-бота