Измените программу по обработке данных в потоке так чтобы она вычисляла сумму положительных чисел

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

Алгоритм нахождения суммы положительных элементов массива следующий:

  1. После заполнения массива присваиваем переменной sum (в ней будет храниться сумма) значение 0.
  2. Используя цикл for , начинаем перебирать элементы массива с первого до последнего.
  3. В цикле с помощью условного оператора if проверяем, больше ли текущий элемент массива нуля.
  4. Если это так, то добавляем его значение к переменной sum .
  5. После завершения цикла выводим значение sum на экран. Оно обозначает сумму только положительных элементов массива.

const N = 15; var arr: array[1..N] of integer; i: byte; sum: integer; begin randomize; for i:=1 to N do begin // заполнение arr[i] := random(10) — 5; write(arr[i]:4); end; writeln; sum := 0; // подсчет суммы for i:=1 to N do if arr[i] > 0 then sum := sum + arr[i]; writeln(sum:5); end.
-4 -4 -5 1 3 -3 0 4 -4 4 -4 -5 2 1 0 15

Можно сократить код программы, если вычислять сумму в том же цикле, в котором происходит заполнение массива. При этом выражение sum := 0 следует поместить до этого цикла.

Pascal. Массивы (разные задачи). Обработка потока данных.

Задача может быть сформулирована так: «Найти сумму неотрицательных элементов массива». В таком случае в условии if следует использовать оператор >= , так как неотрицательные элементы — это положительные и ноль. Если нужно найти сумму отрицательных элементов, то знак будет «меньше» ( < ).

Источник: pas1.ru

Разбор 8 задания ЕГЭ информатика

Формулу для вычисления n-ого элемента арифметической прогрессии:

что нужно знать : формулу для вычисления суммы первых членов арифметической прогрессии: где – a i – i -ый элемент последовательности, – d шаг (разность) последовательности

Что нужно знать :

Формулу для вычисления суммы первых членов арифметической прогрессии:

Где – A I – I — ый элемент последовательности, –

D шаг (разность) последовательности

при каком наибольшем введенном числе d после выполнения программы будет напечатано 55? var n, s, d: integer; begin readln(d); n := 0; s := 0; while s s := s + d; n := n + 5 end; write(n) end.

При каком наибольшем введенном числе d после выполнения программы будет напечатано 55? Var n, s, d: integer; Begin Readln(d); N := 0; S := 0; While s S := s + d; N := n + 5 End; Write(n) End.

0 do begin s := s – 7; n := n * 3 end; writeln(n) end. » width=»640″

Программирование на Python. Урок 4. Программирование циклических алгоритмов (Смирнов В.Е.)

Запишите число, которое будет напечатано в результате выполнения программы. Var s, n: integer; Begin S := 33; N := 1; While s 0 do begin S := s – 7; N := n * 3 End; Writeln(n) End.

определите, что будет напечатано в результате работы следующего фрагмента программы: var k, s: integer; begin s:=0; k:=0; while s s:=s+10; k:=k+1; end; write(k); end.

Определите, что будет напечатано в результате работы следующего фрагмента программы: Var k, s: integer; Begin S:=0; K:=0; While s S:=s+10; K:=k+1; End; Write(k); End.

определите, что будет напечатано в результате работы следующего фрагмента программы: var k, s: integer; begin k:=5; s:=2; while k s:=s+k; k:=k+2; end; write(s); end.

Определите, что будет напечатано в результате работы следующего фрагмента программы: Var k, s: integer; Begin K:=5; S:=2; While k S:=s+k; K:=k+2; End; Write(s); End.

0 do begin s := s – 7; n := n * 3 end; writeln(n) end. » width=»640″

Формулу для вычисления n-ого элемента арифметической прогрессии.

Как решать задание 8 Егэ по информатике? Тип задач: Определите что будет напечатано в — Школьные » /> » /> .keyword < color: red; >Егэ информатика 8 задание перестановка

Читайте также:
Интересные программы для женщин

Как решать задание 8 Егэ по информатике? Тип задач: Определите что будет напечатано в результате работы следующего фрагмента программы

Как решать задание 8 Егэ по информатике? Тип задач : Определите что будет напечатано в результате работы следующего фрагмента программы.

Вася решил загрузить несколько фото в свой аккаунт. Загрузка длилась 40 секунд. Скорость передачи данных 256 Кбит/с. Общий размер всех фото 5 Мбайт. С … колько фотографий загрузил Вася?

9. Определите, сколько раз выполнится цикл, и чему будут равны значенияпеременных a и b после его завершения:​

Измените программу по обработке данных в потоке так, чтобы она вычисляла сумму только положительных чисел:​

Скорость передачи данных 256 Кбит с.

Задание 8 ЕГЭ по информатике 2019: практика и теория — Российский учебник » /> » /> .keyword < color: red; >Егэ информатика 8 задание перестановка

Задание 8 ЕГЭ-2019 по информатике: теория и практика

Задание 8 ЕГЭ-2019 по информатике: теория и практика

Предлагаем вашему вниманию разбор задания №8 ЕГЭ 2019 года по информатике и ИКТ. Этот материал содержит пояснения и подробный алгоритм решения, а также рекомендации по использованию справочников и пособий, которые могут понадобиться при подготовке к ЕГЭ.

В предстоящем ЕГЭ не появилось никаких изменений по сравнению с прошлым годом.

Возможно, вам также будут интересны демоверсии ЕГЭ по математике и физике.

О нововведениях в экзаменационных вариантах по другим предметам читайте в наших новостях.

Пособие содержит задания, максимально приближенные к реальным, используемым на ЕГЭ, но распределенные по темам в порядке их изучения в 10-11-х классах старшей школы. Работая с книгой, можно последовательно отработать каждую тему, устранить пробелы в знаниях, а также систематизировать изучаемый материал. Такая структура книги поможет эффективнее подготовиться к ЕГЭ.

Демо-КИМ ЕГЭ-2019 по информатике не претерпел никаких изменений по своей структуре по сравнению с 2018 годом. Это значимо упрощает работу педагога и, конечно, уже выстроенный (хочется на это рассчитывать) план подготовки к экзамену обучающегося.

Задача «Суммирование чисел». Пример решения

Постановка задачи. Найти сумму всех целых чисел от n_min до n_max.

Вариант решения 1. Взять n_min — наименьшее число, к нему прибавить следующее, и так далее – до n_max.

Обсуждение 1. Тогда для вычисления суммы чисел от 1 до 100 необходимо выполнить 99 операций сложения или около 10 минут, если одну операцию сложения вы будете в уме выполнять за 6 секунд. Попробуйте выполнить такие действия в уме с секундомером. Но если таких чисел у вас 1 млрд = 10 9 , тогда вам понадобится чуть более 30 лет без сна и отдыха.

Реализация 1. Вы скажете, это работа для компьютера и напишите программу, реализующую принципы структурного программирования:
1) оператор goto нам не нужен:
2) будем использовать только две конструкции: последовательность и цикл;
3) программу представим как последовательность блоков: ввод, сумма, вывод; цикл суммирования является вложенным в блок сумма;
4) выделим три подпрограммы (метода класса Program), назовем их именами блоков: ввод(), сумма1(), вывод(). Для ввода данных и вывода результата воспользуемся методами классов Console и Convert. При необходимости используем и другие конструкции;
5) блок в операторе цикла выделять с помощью < >не обязательно, так как он состоит из одного оператора. Перед циклом сумматор sum следует обнулить. Затем в цикле последовательно добавлять к сумматору следующее число.
6) принцип один вход – один выход для каждого блока соблюдается;
7) принцип сверху-вниз также соблюдается, сначала выделим три блока в методе Main(), затем наполним их операторами.
Дополнительно выберем тип int для всех переменных (пока, чтобы было с чего начать). Три поля и четыре метода класса Program объявим статическими (static, подробности – в статье). Тогда программа будет выглядеть так:

Читайте также:
Программа ас этран правила работы

// Сумма чисел от мин до макс using System; namespace Сумма_чисел < class Program < static int n_min, n_max; static int sum; static void Main(string[] args) < ввод(); сумма1(); вывод(«Сумма чисел через цикл = «); Console.ReadKey(); >static void ввод() < Console.Write(«начальное число = «); n_min = Convert.ToInt32(Console.ReadLine()); Console.Write(«конечное число http://c-sharp.pro/wp-content/uploads/2018/03/2191.jpg»> 2191

Проверим работу программы на других данных, для чего используем следующие тесты (о технологии тестирования читайте отдельно) и выполним тестирование:

Номер теста Начальное число Конечное число Сумма — ожидаемый результат Сумма — фактический результат
1 1 100 5050 5050
2 1 101 5151 5151
3 100 1 5050
4 10 10 10 10
5 1 60000 1800030000 1800030000
6 1 70000 2450035000 -1844932296
7 1 1000000000 500000000500000000 -243309312
8 R Неверные данные Необработанное исключение: «Входная строка имеет неверный формат»

Как мы видим, тесты 1,2,4,5 дают ожидаемый результат, на тестах 3,6,7 обнаруживаются ошибки. На тесте 8 возникает необработанное исключение.
Тест 3 показал (сравните с тестом 1), что если начальное число больше конечного, то суммирование не производится. В отличие от компьютера, который данные и команды воспринимает буквально, человек поймет, что сумма чисел от 1 до 100 всегда равна сумме чисел от 100 до 1:
1+2+…+99+100=100+99+…+2+1 .
Поэтому в метод ввод() добавим проверку условия n_min > n_max.. И, если оно истинно, выполним перестановку, используя локальную переменную p. Это самый простой алгоритм перестановки:

int p; if (n_min > n_max)

Выполним тест 3, а также снова тесты 1, 2, 4 (изменения в программе могут приводить к появлению других ошибок), убедимся в правильности нашей корректировки.
Примечание: Обратите внимание на алгоритм перестановки, использующий дополнительную переменную и сокращенный условный оператор (только ветка if). Если условие истинно, то выполняется блок из трех операторов присваивания, заключенных в фигурные скобки. Если условие ложно, то перестановка не выполняется. Таким образом, при вводе любых двух целых чисел результатом выполнения метода ввод() будет пара чисел: n_min .

Какие еще полезные знания можно извлечь из анализа результатов тестирования? Главное – действовать, а не сидеть сложа руки.
Сравним теперь результаты тестов 5 и 6. Может ли сумма положительных чисел от 1 до 70000 быть отрицательной? В первом тесте сумма примерно равна 1,8·10 9 , во втором ожидаемый результат 2,45·10 9 .
Вспомним, что тип int в C# задается структурой, у которой есть некоторое свойство, например, Int32.MaxValue. Выполним оператор:
Console.WriteLine(int.MaxValue);
Будет выведено число 2147483647, примерно равное 2,15·10 9 . То есть:
1,8·10 9 < 2,15·10 9 < 2,45·10 9 .
Это означает, что сумма чисел от 1 до 70000 превышает максимальное число типа int (System.Int32), происходит переполнение, которое никак не диагностируется, что приводит к неправильному результату.

Пример размышлений начинающего программиста: Каждый тип данных имеет минимальные и максимальные допустимые значения. Например, тип int занимает 4 байта (32 бита), причем один из битов используется под знак. Следовательно, максимальное число будет равно 2 31 -1=2147483647. Аналогично, число типа long (Int64) занимает 8 байт (64 бита), из них – 1 бит под знак числа. Тогда максимальное число этого типа равно:
2 63 – 1 = 9223372035854775807, примерно 9,2·10 18 .
Если все дело в типе данных, то давайте заменим тип переменной sum с int на long в классе Program:
static long sum;
Заново выполним тестирование для тестов 1-8. В первых семи тестах получим ожидаемый результат, так как переполнения не происходит.

Читайте также:
Что такое исо образ программы

Добавьте тесты 9 (от 1 до 2·10 9 ) и 10 (от 1 до 3·10 9 ). Объясните результаты. Заметим, что на тесте 9 возникает уже заметная задержка в получении результата – несколько секунд (у меня – 5с).

Попробуем разобраться с тестом 8. Пользователь вашей программы иногда делает ошибки при вводе данных, поэтому можно предусмотреть обработку ошибок некоторым общим образом. Используем оператор try-catch. Оператор try-catch состоит из блока try, за которым следует одно или несколько предложений catch, задающих обработчики для различных исключений. Тогда метод ввод() будет содержать несколько больше операторов:

static void ввод() < try < Console.Write(«начальное число = «); n_min = Convert.ToInt32(Console.ReadLine()); Console.Write(«конечное число = «); n_max = Convert.ToInt32(Console.ReadLine()); int p; if (n_min >n_max) < p = n_min; n_min = n_max; n_max = p; >> catch < Console.WriteLine(«недопустимый формат числа»); >>

Примечание. Этот пример демонстрирует пользу структурного подхода. Мы изменили только метод ввод() без изменения структуры программы.

Выполните тестирование (тесты 1-10), проанализируйте результаты. Теперь реакция на недопустимый формат числа более адекватная.

Другой взгляд на задачу суммирования

А теперь, еще раз обратимся к постановке задачи «Найти сумму всех целых чисел от n_min до n_max».

Будущий великий математик Карл Фридрих Гаусс (1777-1855гг.), будучи в младшей школе, решил эту задачу (от 1 до 100), заданную на уроке учителем, за несколько секунд. Гауссу быстро удалось понять, что все крайние числа в паре составляют 101, и за считанные секунды он решил это уравнение, умножив 101 на 50. Отсюда следует и общий алгоритм:

Вариант решения 2. Найти алгебраическое выражение для суммы арифметической прогрессии (надеюсь, вы знаете, что это такое, если нет – посмотрите в Интернете) от n_min до n_max с шагом 1.

Обсуждение 2. Тогда для вычисления суммы от 1 до 1 млрд = 10 9 вам не понадобится 30 лет без сна и отдыха, а время, затрачиваемое на вычисления, не зависит от исходных данных и будет очень малым.

Реализация 2. Вы скажете, это работа даже не для компьютера и выведите формулу:
sum = (n_min + n_max)(n_max — n_min + 1) / 2.
Подставьте в нее числа 1 и 100, получите 5050, 1 и 101, получите 5151.
Все таки добавим еще один метод, использующий вычисление по формуле:

static void сумма2() < sum = (long)(n_min + n_max) *(long) (n_max — n_min + 1) / 2; >

Операции приведения типов (расширяющее преобразование) используются для снижения риска переполнения. Уберите (long) и исследуйте, что произойдет с тестами.
Для сравнения результатов добавим два оператора в метод Main(), тогда:

2192

static void Main(string[] args) < ввод(); сумма1(); вывод(«Сумма чисел через цикл = «); сумма2(); вывод(«Сумма чисел через формулу text-align: right;»> Конец обсуждения задачи 1.1

Программистский фольклор: «Формула лучше алгоритма».

NEW: Наш Чат, в котором вы можете обсудить любые вопросы, идеи, поделиться опытом или связаться с администраторами.

Источник: c-sharp.pro

Рейтинг
( Пока оценок нет )
Загрузка ...
EFT-Soft.ru