М
Молодежь
К
Компьютеры-и-электроника
Д
Дом-и-сад
С
Стиль-и-уход-за-собой
П
Праздники-и-традиции
Т
Транспорт
П
Путешествия
С
Семейная-жизнь
Ф
Философия-и-религия
Б
Без категории
М
Мир-работы
Х
Хобби-и-рукоделие
И
Искусство-и-развлечения
В
Взаимоотношения
З
Здоровье
К
Кулинария-и-гостеприимство
Ф
Финансы-и-бизнес
П
Питомцы-и-животные
О
Образование
О
Образование-и-коммуникации
kuznetsovapoli
kuznetsovapoli
08.05.2021 11:50 •  Информатика

Язык: c++ суть проблемы: требуется остановить работу цикла после ввода пользователем определенной строки. при этом программа не должна после каждой итерации цикла ожидать ее ввода. пример простейшей программы: #include #include using namespace std; int main() { unsigned long long a=0; for(; ; ) { ++a; usleep(200000); } cout < < a < < endl; return 0; } данная программа постоянно увеличивает значение a с интервалом в 0.2 секунды. логично, что программа не достигнет вывода числа a. что требуется: после ввода пользователем строки "stop" (без кавычек) мы выходим из цикла, но до этого пользователь ничего не вводил и цикл работал в стандартном режиме. пример остановка цикла ровно через 0.1 секунду. вывод: 1 остановка цикла ровно через 0.2 секунды. вывод: 1 (для начала следующей итерации не хватает времени: несколько микросекунд на объявление a, ++a, а также ожидание: 0.2 секунды. и, логично, первое ожидание через 0.2 секунды после начала не закончится) остановка цикла ровно через 1 секунду. вывод: 5 остановка цикла ровно через 10 секунд. вывод: 50 (при дальнейшем увеличении времени, логично, операции будут замедляться и темпы увеличения числа немного замедлятся). решением будет готовая программа.

👇
Ответ:
StanleyPines618
StanleyPines618
08.05.2021

Вот собственно программа.

Начнем с инклюдов, у нас в наличии chrono по тому, что мы будем использовать тип данных для милисекунд, вместо обычной функции sleep. Это делаем по тому, что нам нужна точность синхронизации потоков, к томуже по факту механизм схож, но уже из стандарта C++0x, как и потоки. Если сильно хочется использовать тогда инклюдим так:

#ifdef _WIN32

#include <windows.h>

#else

#include <unistd.h>

#endif

Инклюд через иф дефайны для того, что реализацию функции sleep на разных платформах предоставляют разные хедеры.

Далее в инклюдах есть потоки, их используем по тому, что невозможно одновременно и ждать ввода пользователя и считать в цикле переменную a, по этому распаралеливаем. Один поток будет ждать ввода пользователя, другой же считать переменную a.

Так же, хорошо заметить, что весь вывод из основного потока программы (вывод через поток cout в функции main), осуществляется до старта вс потока и после его join-а, это сделано по тому, что при выводе на один экран терминала, может случится колизия, когда в середину одной строчки выведется другая (добро в асинхронный мир).

Если есть вопросы - пиши в коменты.

Буду благодарен за отметку решения как "лучшее" и нажатую кнопочку " " тут и в моем профиле.

4,6(4 оценок)
Открыть все ответы
Ответ:
tataynka1
tataynka1
08.05.2021
Задание 1.

3 кбайта= 3*1024*8=24576 бит

1 мбайт = 1*1024*8=8196 байт

4096 бит =4096\8\1024= 0.5 кбайта

2.5 мбайт=2.5*1024=2560 кбайт

Задача 2.

k-120 символов

N(мощность алфавита) = 512=> i=9 бит

I=k*i

I=120*9=1080 бит

Задача 3.

I=2 кб

k=4096 символов

N=2^i        I=k*i                i= 2*1024*8/4096=4

2^4=16 - ответ

Задача 4.

Племя мульти:

N=64 => i=6 бит

Значит 150*6=900 бит          

Племя пульти:                                

N=512 =>i=9 бит

Значит 50*9=450 бит

Задача 5.

I=8 кб

N=16 => i=4

k-?               k=I/i            k=8*1024*8/4=16 384 - всего символов

16 384/512=32 страницы

4,6(63 оценок)
Ответ:
nikusha10
nikusha10
08.05.2021

javascript: function Пр(ч) { var стр = ч.toString(); for (let сч = 1; сч < стр.length; сч++) { let ч1 = parseInt(стр.substring(0, сч)), ч2 = parseInt(стр.substring(сч)); if (ч1 > ч2) continue; let к1 = Math.sqrt(ч1), к2 = Math.sqrt(ч2); if (к1 == Math.floor(к1)) { for (let сч1 = 1; сч1 < 10 && сч1 < ч2 - 1; сч1++) for (let сч2 = 1; сч2 * сч2 + сч1 * сч1 <= ч2; сч2++) if (сч2 * сч2 + сч1 * сч1 == ч2 && Math.pow(сч1 + сч2, 2) == ч1) return ч + ": " + сч1 + ", " + сч2; } if (к2 == Math.floor(к2)) { for (let сч1 = 1; сч1 < 10 && сч1 < ч1 - 1; сч1++) for (let сч2 = 1; сч2 * сч2 + сч1 * сч1 <= ч1; сч2++) if (сч2 * сч2 + сч1 * сч1 == ч1 && Math.pow(сч1 + сч2, 2) == ч2) return ч + ": " + сч1 + сч2; } }; return ч + ": -"; } [2949, 10, 11, 25, 95, 2036, 3264, 6581].forEach(function (зн) { alert(Пр(зн)); });

4,6(80 оценок)
Это интересно:
Новые ответы от MOGZ: Информатика
logo
Вход Регистрация
Что ты хочешь узнать?
Спроси Mozg
Открыть лучший ответ