0 / 0 / 0 Регистрация: 14.03.2009 Сообщений: 4 |
|
1 |
|
Как посмотреть результат выполнения программы?14.03.2009, 19:49. Показов 2710. Ответов 11
Читаю книгу, всё понятно, похоже ваще на php, но в чем писать код чтобы его в действии увидеть??? Подскажите плз
0 |
683 / 232 / 16 Регистрация: 15.10.2007 Сообщений: 1,247 |
|
14.03.2009, 20:16 |
2 |
Скачай DevC++
0 |
woofer46 0 / 0 / 0 Регистрация: 14.03.2009 Сообщений: 4 |
||||
14.03.2009, 20:27 [ТС] |
3 |
|||
Вот только не хочет компилировать пишет ошибку внизу в журнале на 5ой строке
5 C:Documents and SettingsAdminРабочий столБезымянный2.cpp `printf’ undeclared (first use this function)
0 |
577 / 571 / 65 Регистрация: 29.01.2009 Сообщений: 1,274 |
|
14.03.2009, 20:28 |
4 |
studio.h?
0 |
Mecid 683 / 232 / 16 Регистрация: 15.10.2007 Сообщений: 1,247 |
||||
14.03.2009, 20:38 |
5 |
|||
Решение
0 |
0 / 0 / 0 Регистрация: 14.03.2009 Сообщений: 4 |
|
14.03.2009, 21:06 [ТС] |
6 |
А можешь сказать почему так, я ведь с учебника списывал, правдо он 2003 года))
0 |
683 / 232 / 16 Регистрация: 15.10.2007 Сообщений: 1,247 |
|
14.03.2009, 21:09 |
7 |
Фиг его знает опечатка наено
0 |
0 / 0 / 0 Регистрация: 14.03.2009 Сообщений: 4 |
|
14.03.2009, 21:53 [ТС] |
8 |
Хм, ну ладно, СПАСИБО, если еще будут подобные обращусь)) ++ Добавлено через 16 минут 29 секунд
0 |
Mecid 683 / 232 / 16 Регистрация: 15.10.2007 Сообщений: 1,247 |
||||
14.03.2009, 22:10 |
9 |
|||
0 |
5 / 4 / 1 Регистрация: 14.03.2009 Сообщений: 3 |
|
15.03.2009, 14:15 |
10 |
Читай читай=)) учебник по си довльно таки несложно за пару недель освоить если конечно сидеть как следует=))
0 |
3 / 3 / 0 Регистрация: 15.03.2009 Сообщений: 57 |
|
16.03.2009, 15:09 |
11 |
Читай читай=)) учебник по си довльно таки несложно за пару недель освоить если конечно сидеть как следует=)) Эт смотря что вы хотите в нем знать)))и хотите ли вы просто прочитать его или научиться программировать)
0 |
683 / 232 / 16 Регистрация: 15.10.2007 Сообщений: 1,247 |
|
16.03.2009, 16:12 |
12 |
Эт смотря что вы хотите в нем знать))) Согласен я до сих пор восхищаюсь находя все новые приемы программирования считаю его универсалом
0 |
Узнай цену своей работы
Формулировка задачи:
Program VR; Var l.i.m: integer; Begin l:=5, m:=2 for l:=3 to 7 do l:= l+m*i write(l); End. Заранее спасибо))
Код к задаче: «Определить результат выполнения программы.»
textual
Листинг программы
Program VR; Var l,i,m: integer; Begin l:=5; m:=2; for i:=3 to 7 do l:= l+m*i; write(l); End.
Полезно ли:
5 голосов , оценка 3.600 из 5
Похожие ответы
- Определить время выполнения программы
- Найти значение получившееся переменной n в результате выполнения
- Что будет выдано на печать в результате выполнения следующих операторов?
- Уменьшить время выполнения программы
- Узнать затраченную скорость на выполнение программы, написанной на pascal
- Неверный результат в программе с условными операторами
- Как вывести результаты работы программы в текстовый файл в данной программе?
- Запись результатов работы программы в файл
- Определить количество чисел, для которых программа выведет такой же результат, что и для заданного числа
- Переменные x и y описаны в программе как целочисленные. Определите значение переменной x после выполнения следующего фрагмента программы
- Определите значение переменной c после выполнения следующего фрагмента программы
Результат выполнения программы
k=10
m=4
b1=1
bk=4.6
c1=1
ck=3.6
Полученный
результат: y= 5.80738
!!
Проанализируйте программу. Создав новый
файл проекта с именем faktorial.ide,
наберите в нем текст данной программы,
откомпилируйте ее и произведите запуск
программы на выполнение.
6.3. Перегруженные функции
С++ позволяет определять несколько
функций, реализующих один и тот
же алгоритм, с одним и тем же именем.
Эта особенность называетсяперегрузкой
функции, а сами функции —перегруженнымифункциями. Применение таких функций
делает программы более понятными и
легко читаемыми.
Перегруженные функции различаются
компилятором с помощью так называемой
сигнатуры – списка типов их
аргументов. Однако, используя в
перегруженных функциях параметры по
умолчанию, следует быть осторожным, так
как функция с пропущенными аргументами
может быть вызвана не той перегруженной
функцией.
Примером эффективного использования
перегрузки функций является задача
сортировки массивов различных типов.
Ниже приведена программа сортировки
методом «пузырька» числовых массивов
типа int,long,floatиdoubleразличной размерности (лист. 6.2).
Листинг 6.2.
func.сpp
#include
<iostream.h>
#include
<math.h>
//Прототипы
перегруженных функций sort
void sort(int,int[]);
void sort(int,long[]);
void sort(int,float[]);
void sort(int,double[]);
void
main()
//Основная
программа
{
/*Корректируемые
параметры до использования
программы:
значение m и тип z */
const int m=5;
//Размерность
массива чисел
double z[m];
//Тип
массива чисел z
//Ввод массива
cout<<«Введите
элементы массива z[]:n»;
for(int
i=0;i<m;i++)
{
cout<<«z[«<<i<<«]=»;cin>>z[i];
}
cout<<«nИсходный
массив чисел:n»<<«z[«<<m<<«]={«;
for(int
i=0;i<m;i++)
cout<<z[i]<<»
«;
cout<<«}»<<endl;
cout<<«nОтсортированный
массив чисел:n»<<«z[«<<m<<«]={«;
sort(m,z);
//Обращение
к функции sort с массивом типа double
cout<<«}»;
}
//Перегруженная
функция для массива типа int
void
sort(int
n,int
mass[])
//Заголовок
с параметром — массивом
{
//Сортировка
методом «пузырька»
for(int
i=0;i<n-1;i++)
{ int a;
for(int j=i+1;j<n;j++)
if (mass[j]<mass[i])
{a=mass[i];
mass[i]=mass[j];
mass[j]=a;
}
}
//Вывод
отсортированного массива
for(int
i=0;i<n;i++)
cout<<mass[i]<<»
«;
}
//Перегруженная
функция для массива типа long
void sort(int n,long mass[])
{
for(int i=0;i<n-1;i++)
{ long a;
for(int j=i+1;j<n;j++)
if (mass[j]<mass[i])
{a=mass[i];
mass[i]=mass[j];
mass[j]=a;
}
}
for(int i=0;i<n;i++)
cout<<mass[i]<<»
«;
}
//Перегруженная
функция для массива типа float
void sort(int n,float mass[])
{
for(int i=0;i<n-1;i++)
{ float a;
for(int j=i+1;j<n;j++)
if (mass[j]<mass[i])
{a=mass[i];
mass[i]=mass[j];
mass[j]=a;
}
}
for(int i=0;i<n;i++)
cout<<mass[i]<<»
«;
}
//Перегруженная
функция для массива типа double
void sort(int n,double mass[])
{
for(int i=0;i<n-1;i++)
{ double a;
for(int j=i+1;j<n;j++)
if (mass[j]<mass[i])
{a=mass[i];
mass[i]=mass[j];
mass[j]=a;
}
}
for(int i=0;i<n;i++)
cout<<mass[i]<<»
«;
}
Содержание:
- Решение задания 6 ЕГЭ по информатике для 2021
- Решения подобных заданий прошлых лет
- Определить, какое число пропущено
- Простые задания с двумя линейными непересекающимися функциями
- Сумма или разность двух линейных функций (while s — n или while s + n)
- Поиск наименьшего/наибольшего целого введенного числа d
- Усложненные задания с двумя линейными функциями
- Арифметическая и геометрическая прогрессия
- Программирование: массивы и матрицы
Решение задания 6 ЕГЭ по информатике для 2021
6-е задание: «Программирование: основные конструкции»
Уровень сложности
— базовый,
Требуется использование специализированного программного обеспечения
— нет,
Максимальный балл
— 1,
Примерное время выполнения
— 4 минуты.
Проверяемые элементы содержания: Знание основных конструкций языка программирования, понятия переменной, оператора присваивания
До ЕГЭ 2021 года — это было задание № 8 и задание № 19 ЕГЭ
Задание демонстрационного варианта 2022 года ФИПИ
Плейлист видеоразборов задания на YouTube:
6_1 new: Определите, при каком наименьшем введённом значении переменной s программа выведет число 256 :
Паскаль:
1 2 3 4 5 6 7 8 9 10 11 |
var k,n,p,l,s,x:integer; var s, n: integer; begin readln (s); n := 1; while s <=45 do begin s := s + 4; n := n * 2 end; writeln(n) end. |
Бейсик: |
Python:
s = int(input()) n = 1 while s <= 45: s = s + 4 n = n * 2 print( n ) |
С++:
#include <iostream> using namespace std; int main() { int s, n = 1; cin >> s; while( s <= 45 ) { s = s + 4; n = n * 2; } cout << n; } |
Типовые задания для тренировки
Ответ: 14
Видеорешение подобного 6 задания на Python:
📹 Видео
📹 Видеорешение на RuTube здесь
Показать решение:
-
✎ Способ 1 (программный):
- Поскольку в цикле
s
увеличивается, а по условию задания следует найти наименьшее значениеs
, то можно начать сs=1
, постоянно увеличивая значениеs
на единицу во внешнем цикле. - Важно для внешнего цикла использовать другую переменную, т.к. во внутреннем цикле переменная
s
меняется, а нам следует каждый шаг внешнего цикла сохранить предыдущее значение s, увеличив его всего на 1. Используем переменнуюS1
для этих целей.
Pascalabc.net:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 |
begin var s0 := 1; while true do // внешний цикл, бесконечный begin var s := s0; // --- код из условия задания --- // var n := 1; while s <= 45 do // внутренний цикл из задания begin s := s + 4; n := n * 2; end; // --- конец кода из условия задания --- // if n = 256 then // если найдено, то выводим соответствующее s begin print(s0); break; // выход из бесконечного цикла end; s0 := s0 + 1; // end; end. |
Пояснение:
Бейсик: |
Python:
s1 = 1 while True: # внешний цикл, бесконечный s = s1 # --- код из условия задания --- n = 1 while s <= 45: s = s + 4 n = n * 2 # --- конец кода из условия задания --- if n == 256: print(s1) break s1 += 1 |
С++: |
6_2 new: Определите, при каком наибольшем введённом значении переменной s программа выведет число 96:
Паскаль:
1 2 3 4 5 6 7 8 9 10 |
var s, n: integer; begin readln (s); n := 3; while s <= 51 do begin s := s + 7; n := n * 2 end; writeln(n) end. |
Бейсик: |
Python:
s = int(input()) n = 3 while s <= 51: s = s + 7 n = n * 2 print( n ) |
С++:
#include <iostream> using namespace std; int main() { int s, n = 3; cin >> s; while( s <= 51 ) { s = s + 7; n = n * 2; } cout << n; } |
Типовые задания для тренировки
Ответ: 23
📹 Видео
📹 Видеорешение на RuTube здесь
Показать решение:
✎ Способ 1 (программный):
Pascalabc.net:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 |
begin var s1 := 50; while true do // внешний цикл, бесконечный begin var s := s1; // --- код из условия задания --- // var n := 3; while s <= 51 do // внутренний цикл из задания begin s := s + 7; n := n * 2; end; // --- конец кода из условия задания --- // if n = 96 then // если найдено, то выводим соответствующее s begin print(s1); break; // выход из бесконечного цикла end; s1 := s1 - 1; // end; end. |
Пояснение:
s
увеличивается, и цикл работает пока s<=50, а по условию следует найти наибольшее значение s
, то можно начать с s = 50
, постоянно уменьшая значение s
на единицу во внешнем цикле.s
меняется, а нам следует каждый шаг внешнего цикла сохранить предыдущее значение s
, уменьшив его всего на 1. Используем переменную S1
для этих целей.Бейсик: |
Python:
s1 = 50 while True: # внешний цикл, бесконечный s = s1 # --- код из условия задания --- n = 3 while s <= 51: s = s + 7 n = n * 2 # --- конец кода из условия задания --- if n == 96: print(s1) break s1 -= 1 |
С++: |
6_3 new::
Сколько существует различных значений d
, оканчивающихся на 8, при вводе которых эта приведенная программа выведnет число 50?
Паскаль:
1 2 3 4 5 6 7 8 9 10 11 |
var S, N, d: integer; begin readln(d); S := 15; N := 10; while S <= 2400 do begin S := S + d; N := N + 5; end; writeln(N); end. |
Бейсик: |
Python:
d = int(input()) S = 15 N = 10 while S <= 2400: S = S + d N = N + 5 print(N) |
С++: |
Типовые задания для тренировки
Ответ: 4
Показать решение:
-
✎ Способ 1 (программный):
- Вывод:
Pascalabc.net:
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 |
begin var counter:=0; var d1:=1; while true do begin var d := d1; // из условия задачи var s := 15; var n := 10; while s <= 2400 do begin s := s + d; n:=n + 5; end; // проверка условий: увеличение счетчика if (d mod 10 = 8) and (n = 50) then begin counter+=1;; end; d1 += 1; // выход из бесконечного цикла if d1 = 2400 then break; end; print (counter) end. |
4
Бейсик: |
Python:
counter = 0 d1 = 1 while True: s = 15 n = 10 d = d1 # --- код из условия задания --- while s <= 2400: s = s + d n = n + 5 if d%10==8 and n==50: counter+=1 d1=d1+1 if d1 == 2400: break print (counter) |
С++: |
6_4 new:
Определите наименьшее и наибольшее введённое значение переменной s
, при котором программа выведет число 210. В ответ запишите оба числа в порядке убывания без пробелов и других разделителей
Паскаль:
1 2 3 4 5 6 7 8 9 10 |
var s, n: integer; begin readln(s); n := 600; while n > s do begin s := s + 3; n := n - 6 end; writeln(n) end. |
Бейсик: |
Python:
s = int(input()) n = 600 while n > s: s = s + 3 n = n - 6 print(n) |
С++: |
Ответ: 2315
Показать решение:
-
✎ Способ 1 (программный):
- Вывод:
- Записываем в порядке убывания:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 |
begin var s_ := -100; while true do begin var n := 600; var s := s_; while n > s do begin s := s + 3; n := n - 6 end; if n = 210 then print(s_); s_ += 1; if s > 1000 then break; end; end. |
15 16 17 18 19 20 21 22 23
2315
Python:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
s_ = -100 while True: # внешний цикл, бесконечный s = s_ n = 600 # --- код из условия задания --- while n > s: s = s + 3 n = n - 6 # --- конец кода из условия задания --- if n == 210: print(s_) s_ += 1 if s > 1000: break |
6_5 new:
Определите, при каком наибольшем положительном введённом значении переменной s
программа выведет трёхзначное число.
Паскаль:
1 2 3 4 5 6 7 8 9 10 11 |
var s, n: integer; begin readln (s); n := 200; while s div n >= 2 do begin s := s + 5; n := n + 5 end; writeln(s) end. |
Бейсик: |
Python:
s = int(input()) n = 200 while s // n >= 2: s = s + 5 n = n + 5 print(s) |
С++: |
Ответ: 699
Показать решение:
-
✎ Способ 1 (программный):
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 |
begin var s_ := 1000; while true do begin var n := 200; var s := s_; while s div n >= 2 do begin s := s + 5; n := n + 5 end; if (s > 99) and (s<1000) then begin print(s_); break; end; s_ -= 1; end; end. |
Python:
1 2 3 4 5 6 7 8 9 10 11 12 13 |
s_ = 1000 while True: # внешний цикл, бесконечный s = s_ n = 200 # --- код из условия задания --- while s // n >=2: s = s + 5 n = n + 5 # --- конец кода из условия задания --- if 99 < s < 1000: print(s_) break s_ -= 1 |
6_6 new:
Получив на вход некоторое натуральное число X
, этот алгоритм печатает одно число. Сколько существует чисел Х
, для которых алгоритм напечатает число на отрезке [2;500]?
Паскаль:
1 2 3 4 5 6 7 8 9 10 11 |
var x, s, n: integer; begin readln(x); s := 6 * (x div 15); n := 1; while s < 300 do begin s := s + 18; n := n * 2 end; writeln(n) end. |
Бейсик: |
Python:
x = int(input()) s = 6 * (x // 15) n = 1 while s < 300: s = s + 18 n = n * 2 print(n) |
С++: |
Ответ: 360
Показать решение:
-
✎ Способ 1 (программный):
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 |
begin var x := 1; var count := 0; while true do begin var s := 6 * (x div 15); var n := 1; while s < 300 do begin s := s + 18; n := n * 2 end; if (n >= 2) and (n <= 500) then count += 1; x += 1; if x > 1000 then break; end; print(count) end. |
Python:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
x = 1 count = 0 while True: # внешний цикл, бесконечный s = 6 * (x // 15) n = 1 while s <300: s = s + 18 n = n * 2 # --- конец кода из условия задания --- if 1 < n < 501: count+=1 x += 1 if x > 1000: break print (count) |
Решения подобных заданий прошлых лет
Определить, какое число пропущено
6_14:
Сопоставьте формулу:
и программу, предназначенную для расчета по данной формуле. Программа написана правильно, а в формуле допущена ошибка.
Определите, где и какое число в формуле пропущено?
Паскаль:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
var k,n,p,l,s,x:integer; begin writeln('введите n='); readln(n); writeln('введите x='); readln(x); s:=0; p:=1; l:=x; For k:=1 to n do begin p:=p * k; s:=s + 3*l/p; l:=l*x; end; writeln('S=',S:5:2); end. |
Бейсик:
INPUT "введите n=", n INPUT "введите x=", x s=0: p=1 l=x FOR k:=1 to n p = p * k: s = s + 3*l/p l = l*x NEXT k PRINT "S=",S END |
Python:
n = int(input('введите n=')) x = int(input('введите x=')) s=0 p=1 l=x For k in range (1,n+1): p*= k s+=3*l/p l*=x print('S=',S) |
С++:
#include <iostream> using namespace std; int main() { int k,n,p,s,x; printf("введите n="); scanf("%d",&n); printf("введите x="); scanf("%d",&x); l=x; for (k=1,s=0,p=1;k<=n;k++) { p*=k; s+=3*l/p; l*=x; } printf("s=%d",s); } |
Ответ: 3
Показать решение:
- Рассмотрим формулу:
- Рассмотрим алгоритм программы:
- Основные действия происходят в цикле, в котором k изменяется от 1 до n (n вводится в начале программы):
Фактически она обозначает: сумма xk/ k!
для всех k, начиная от 1 до n.
For k:=1 to n do
p:=p * k;
l:=l*x;
s:=s + 3*l/p;
Простые задания с двумя линейными непересекающимися функциями
6_3:
Определите, что будет напечатано в результате работы следующего фрагмента программы:
Паскаль:
1 2 3 4 5 6 7 8 9 10 11 |
var k,s:integer; begin s:=512; k:=0; while s<2048 do begin s:=s+64; k:=k+1; end; write(k); end. |
Бейсик:
DIM S, K AS INTEGER S = 512 K = 0 WHILE S < 2048 S = S + 64 K = K + 1 WEND PRINT K |
Python:
s = 512 k = 0 while s < 2048: s = s + 64 k = k + 1 print(k) |
С++:
#include <iostream> using namespace std; int main() { int s = 512, k = 0; while (s < 2048) { s = s + 64; k = k + 1; } cout << k << endl; return 0; } |
Подобные задания для тренировки
Ответ: 24
✍ Показать решение:
Рассмотрим алгоритм программы:
- В цикле k увеличивается на единицу (k — счетчик). Соответственно, k будет равно количеству итераций (повторов) цикла. После завершения работы цикла k выводится на экран, т.е. это и есть результат работы программы.
- В цикле s увеличивается на 64. Для простоты расчетов возьмем начальное s не 512, а 0. Тогда условие цикла поменяется на
s < 1536
(2048 — 512 = 1536):
s:=0; k:=0; while s < 1536 do begin ...
s<1536
, а s увеличивается на 64, отсюда следует что итераций цикла (шагов) будет:1536 / 64 = 24
📹 Видео
📹 Видеорешение на RuTube здесь (теоретическое решение)
Определите, что будет напечатано в результате выполнения программы:
Паскаль:
1 2 3 4 5 6 7 8 9 10 11 |
var s, i: integer; begin i := 1; s := 105; while s > 5 do begin s := s - 2; i := i + 1 end; writeln(i) end. |
Бейсик:
DIM S, I AS INTEGER I = 1 S = 105 WHILE S > 5 S = S - 2 I = I + 1 WEND PRINT I |
Python:
i = 1 s = 105 while s > 5: s = s - 2 i = i + 1 print(i) |
С++:
#include <iostream> using namespace std; int main() { int s = 105, i = 1; while (s > 5) { s = s - 2; i = i + 1; } cout << i << endl; return 0; } |
Ответ: 51
✍ Показать решение:
- Рассмотрим алгоритм. Цикл зависит от переменной s, которая уменьшается каждую итерацию цикла на 2.
- В цикле также присутствует счетчик — переменная i, которая увеличится на единицу ровно столько раз, сколько итераций (проходов) цикла. Т.е. в результате выполнения программы распечатается значение, равное количеству итераций цикла.
- Поскольку условие цикла зависит от s, нам необходимо посчитать, сколько раз сможет s уменьшиться на 2 в цикле. Для удобства подсчета изменим условие цикла на
while s > 0
; так как мы s уменьшили на 5, соответственно, изменим и 4-ю строку наs:=100
(105-5):
... s := 100; while s > 0 do begin ...
100 / 2 = 50 -> количество итераций цикла
50 + 1 = 51
6 задание. Демоверсия ЕГЭ 2018 информатика:
Запишите число, которое будет напечатано в результате выполнения следующей программы.
Паскаль:
1 2 3 4 5 6 7 8 9 10 11 |
var s, n: integer; begin s := 260; n := 0; while s > 0 do begin s := s - 15; n := n + 2 end; writeln(n) end. |
Бейсик:
DIM S, N AS INTEGER S = 260 N = 0 WHILE S > 0 S = S - 15 N = N + 2 WEND PRINT N |
Python:
s = 260 n = 0 while s > 0: s = s - 15 n = n + 2 print(n) |
С++:
#include <iostream> using namespace std; int main() { int s = 260, n = 0; while (s > 0) { s = s - 15; n = n + 2; } cout << n << endl; return 0; } |
Ответ: 36
✍ Показать решение:
-
Рассмотрим алгоритм:
- Цикл зависит от значения переменной s, которая изначально равна 260. В цикле переменная s постоянно меняет свое значение, уменьшаясь на 15.
- Цикл завершит свою работу когда s <= 0. Значит, необходимо посчитать сколько чисел 15 «войдет» в число 260, иными словами:
260 / 15 ~ 17,333...
s > 0
, то увеличим полученное число на единицу: 17 + 1 = 18 итераций цикла Проверим: 17 * 15 = 255 (< 260) 18 * 15 = 270 (> 260)
n = 18 * 2 = 36
📹 Видео
📹 Видеорешение на RuTube здесь (теоретическое решение)
6_4:
Определите, что будет напечатано в результате выполнения следующего фрагмента программы:
Паскаль:
1 2 3 4 5 6 7 8 9 10 11 |
var k,s: integer; begin k:=1024; s:=50; while s>30 do begin s:=s-4; k:=k div 2; end; write(k) end. |
Бейсик:
DIM S, K AS INTEGER S = 50 K = 1024 WHILE S > 30 S = S - 4 K = K 2 WEND PRINT K |
Python:
s = 50 k = 1024 while s > 30: s = s - 4 k = k // 2 print(k) |
С++:
#include <iostream> using namespace std; int main() { int s = 50, k = 1024; while (s > 30) { s = s - 4; k = k / 2; } cout << k << endl; return 0; } |
Ответ: 32
📹 Видео
📹 Видеорешение на RuTube здесь (теоретическое решение)
6_5:
Определите значение переменной c после выполнения следующего фрагмента программы. Ответ запишите в виде целого числа.
Паскаль:
1 2 3 4 5 6 7 |
a:=-5; c:=1024; while a<>0 do begin c:=c div 2; a:=a + 1 end; |
Бейсик:
A = -5
C = 1024
WHILE A <> 0
C = C 2
A = A + 1
WEND
|
Python:
a = -5 c = 1024 while a != 0: c = c // 2 a = a + 1 |
С++:
int a = -5, c = 1024; while (a != 0) { c = c / 2; a = a + 1; } |
Ответ: 32
📹 Видео
📹 Видеорешение на RuTube здесь (теоретическое решение)
6_12:
Определите, что будет напечатано в результате работы следующего фрагмента программы.
Паскаль:
1 2 3 4 5 6 7 8 9 10 |
var n, s: integer; begin n := 1; s := 0; while s <= 365 do begin s := s + 36; n := n * 2 end; write(n) end. |
Бейсик:
N = 1 S = 0 WHILE S <= 365 S = S + 36 N = N * 2 WEND PRINT N |
Python:
n = 1 s = 0 while s <= 365: s = s + 36 n = n * 2 print(n) |
С++:
using namespace std; int main() { int n = 1, s = 0; while (s <= 365) { s = s + 36; n = n * 2; } cout << n << endl; return 0; } |
Ответ: 2048
Показать решение:
- с каждым шагом цикла значение s увеличивается на 36, пока не станет больше 365; а значение n увеличивается в 2 раза, так что n=2k, где k – это число итераций цикла;
- поскольку s увеличивается на 36, конечное значение s должно быть равно 0+36*k , достигается при k=11 (и s=36*11=396);
- тогда n = 2k = 211 = 2048.
Сумма или разность двух линейных функций (while s — n или while s + n)
6_7:
Запишите число, которое будет напечатано в результате выполнения следующей программы:
Паскаль:
1 2 3 4 5 6 7 8 9 10 11 |
var s, n: integer; begin s := 522; n := 400; while s - n > 0 do begin s := s - 20; n := n - 15 end; write(s) end. |
Бейсик:
DIM S, N AS INTEGER S = 522 N = 400 WHILE S - N > 0 S = S - 20 N = N - 15 WEND PRINT S |
Python:
s = 522 n = 400 while s - n > 0: s = s - 20 n = n - 15 print(s) |
С++:
#include <iostream> using namespace std; int main() { int s = 522, n = 400; while (s - n > 0) { s = s - 20; n = n - 15; } cout << s << endl; return 0; } |
Подобные задания для тренировки
Ответ: 22
✍ Показать решение:
- В алгоритме присутствует цикл. Для того, чтобы разобраться в алгоритме, выполним трассировку начальных итераций цикла:
- Видим, что в условии разница между значениями составляет 5:
№ шага | условие цикла | s | n |
---|---|---|---|
1 | 522-400=122 122 > 0 |
522-20=502 | 400-15=385 |
2 | 502-385=117 117 > 0 |
502-20=482 | 385-15=370 |
3 | 482-370=112 112 > 0 |
… | … |
122 - 117 = 5 117 - 112 = 5 ...
122 / 5 = 24,4 24 * 5 = 120 (120 + 2 = 122)
Это значит, что на 24-й итерации цикла переменные s и n получили такие значения, после которых условие еще осталось истинным: 2 > 0. На 25-м шаге выполняется это условие:
№ шага | условие цикла | s | n |
---|---|---|---|
25 | 2 > 0 | s-20=… | n-15=… |
25 * 5 = 125 (125 - 3 = 122)
№ шага | условие цикла | s | n |
---|---|---|---|
25 | 2 > 0 | s-20=… | n-15=… |
26 | 3 < 0 | не выполняется | не выполняется |
25 * 20 = 500 (за 25 итераций)
522 - 500 = 22 (вычитаем из исходных данных)
Результат: 22
📹 Видео
📹 Видеорешение на RuTube здесь (теоретическое решение)
6_13
Запишите число, которое будет выведено в результате работы программы:
Паскаль:
1 2 3 4 5 6 7 8 9 10 |
var s, n: integer; begin s := 10; n := 55; while n > s do begin s := s + 1; n := n - 1 end; writeln(n) end. |
Бейсик:
DIM S, N AS INTEGER S = 10 N = 55 WHILE N > S S = S + 1 N = N - 1 WEND PRINT N |
Python:
s = 10 n = 55 while n > s: s = s + 1 n = n - 1 print(n) |
С++:
#include <iostream> using namespace std; int main() { int s = 10, n = 55; while (n > s) { s = s + 1; n = n - 1; } cout << n << endl; return 0; } |
Ответ: 32
Показать решение:
- Для условия цикла — перенесем влево:
n - s > 0
55 - 10 = 45
n - 1 > s + 1 => n - s - 2 > 0
для 22 итераций: 2 * 22 = 44 в условии цикла имеем 45 > 44, т.е. условие еще истинно для 23 итераций: 2 * 23 = 46 в условии цикла имеем 45 > 46 - условие ложно, т.е. цикл прекращает работу
n = 55 - 23 = 32
Поиск наименьшего/наибольшего целого введенного числа d
ЕГЭ 6.8:
При каком наименьшем целом введенном числе d после выполнения программы будет напечатано число 192?
Паскаль:
1 2 3 4 5 6 7 8 9 10 11 12 |
var k,s,d: integer; begin readln (d); s:=0; k:=0; while k < 200 do begin s:=s+64; k:=k+d; end; write(s); end. |
Бейсик:
DIM S, K, D AS INTEGER INPUT D S = 0 K = 0 WHILE K < 200 S = S + 64 K = K + D WEND PRINT S |
Python:
d = int (input ()) s = 0 k = 0 while k < 200: s = s + 64 k = k + d print(s) |
С++:
#include <iostream> using namespace std; int main() { int s = 0, k = 0; int d; cin >> d; while (k < 200) { s = s + 64; k = k + d; } cout << s << endl; return 0; } |
Подобные задания для тренировки
Ответ: 67
✍ Показать решение:
Рассмотрим алгоритм программы:
- Цикл зависит от переменной k, которая каждую итерацию цикла увеличивается на значение d (вводимое). Цикл закончит «работу», когда k сравняется с 200 или превысит его (k >= 200).
- Результатом программы является вывод значения переменной s. В цикле s увеличивается на 64.
- Так как по заданию необходимо, чтобы вывелось число 192, то число повторов цикла определим так:
64 * x = 192 число повторов: x = 192 / 64 = 3
3 * d = 200 d = 200/3 ~ 66,66
66 + 66 + 66 = 198 (< 200)
т.е. цикл после трех прохождений еще продолжит работу, что нам не подходит.
67 + 67 + 67 = 201 (>200)
📹 Видео
📹 Видеорешение на RuTube здесь
6_9:
Запишите через запятую наименьшее и наибольшее значение числа d, которое нужно ввести, чтобы после выполнения программы было напечатано 153?
Паскаль:
1 2 3 4 5 6 7 8 9 10 11 |
var n, s, d: integer; begin readln(d); n := 33; s := 4; while s <= 1725 do begin s := s + d; n := n + 8 end; write(n) end. |
Бейсик:
DIM S, N, D AS INTEGER INPUT D N = 33 S = 4 WHILE S <= 1725 S = S + D N = N + 8 WEND PRINT N |
Python:
d = int (input ()) n = 33 s = 4 while s <= 1725: s = s + d n = n + 8 print(n) |
С++:
#include <iostream> using namespace std; int main() { int s = 4, n = 33; int d; cin >> d; while (s <= 1725) { s = s + d; n = n + 8; } cout << n << endl; return 0; } |
Ответ: 115, 122
✍ Показать решение:
Разберем листинг программы:
- Цикл программы зависит от значения переменной s, которая в цикле постоянно увеличивается на значение d (d вводится пользователем в начале программы).
- Кроме того, в цикле переменная n увеличивается на 8. Значение переменной n выводится на экран в конце программы, т.е. по заданию n к концу программы должно n = 153.
- Необходимо определить количество итераций цикла (прохождений). Так как начальное значение n = 33, а в конце оно должно стать 153, в цикле увеличиваясь на 8, то сколько раз 8 «поместится» в 120 (153 — 33)? :
120 / 8 = 15 раз (количество итераций цикла)
s <= 1725
сделаем s <= 1721
(1725-1721)... s := 0; while s <= 1721 do begin ...
1721 / 15 = 114,733 - не целое, не подходит 1722 / 15 = 114,8 - не целое, не подходит ... берем кратное 5: 1725 / 15 = 115 - целое, подходит!
14 * d <= 1721 при этом: 15 * d > 1721
14 * 122 = 1708 (<=1721) 15 * 122 = 1830 (>1721)
📹 Видео
Усложненные задания с двумя линейными функциями
6_6:
Запишите число, которое будет напечатано в результате выполнения следующей программы:
Паскаль:
1 2 3 4 5 6 7 8 9 10 |
var s, n: integer; begin s := 0; n := 0; while 2*s*s < 123 do begin s := s + 1; n := n + 2 end; writeln(n) end. |
Бейсик:
DIM S, N AS INTEGER S = 0 N = 0 WHILE 2*S*S < 123 S = S + 1 N = N + 2 WEND PRINT N |
Python:
s = 0 n = 0 while 2*s*s < 123: s = s + 1 n = n + 2 print(n) |
С++:
#include <iostream> using namespace std; int main() { int s = 0, n = 0; while (2*s*s < 123) { s = s + 1; n = n + 2; } cout << n << endl; return 0; } |
Подобные задания для тренировки
Ответ: 16
✍ Показать решение:
Разберем листинг программы:
- В цикле переменная s постоянно увеличивается на единицу (работает как счетчик), а переменная n в цикле увеличивается на 2.
- В результате работы программы на экран выводится значение n.
- Цикл зависит от s, причем работа цикла завершится когда 2 * s2 >= 123.
- Необходимо определить количество прохождений цикла (итераций цикла): для этого определим такое наименьшее возможное s, чтобы 2 * s2 >= 123:
1 шаг: s = 2*12=2 2 шаг: s = 2*22=8 3 шаг: s = 2*32=18 ... 7 шаг: s = 2*72=98 (меньше 123, т.е. цикл еще работает) 8 шаг: s = 2*82=128 (больше 123, цикл не работает! )
Либо просто нужно было бы найти такое наименьшее возможное четное число >= 123, которое при делении на 2 возвращало бы вычисляемый корень числа:
s=124/2 = √62 - не подходит! s=126/2 = √63 - не подходит! s=128/2 = √64 = 8 - подходит!
n = 2 * 8 = 16
📹 Видео
Арифметическая и геометрическая прогрессия
6_10:
Определите, что будет напечатано в результате работы следующего фрагмента программы:
Паскаль:
1 2 3 4 5 6 7 8 9 10 |
var k, s: integer; begin s:=3; k:=1; while k < 25 do begin s:=s+k; k:=k+2; end; write(s); end. |
Бейсик:
DIM S, K AS INTEGER S = 3 K = 1 WHILE K < 25 S = S + K K = K + 2 WEND PRINT S |
Python:
s = 3 k = 1 while k < 25: s = s + k k = k + 2 print(s) |
С++:
#include <iostream> using namespace std; int main() { int s = 3, k = 1; while (k < 25) { s = s + k; k = k + 2; } cout << s << endl; return 0; } |
Подобные задания для тренировки
Ответ: 147
✍ Показать решение:
Разберем листинг программы:
- Результатом программы является вывод значения s.
- В цикле s меняется, увеличиваясь на k, при начальном значении s = 3.
- Цикл зависит от k. Выполнение цикла завершится при k >= 25. Начальное значение k = 1.
- В цикле k постоянно увеличивается на 2 -> значит, можно найти количество итераций цикла.
- Количество итераций цикла равно:
n = 25 / 2 ~ 12
(т.к. k изначально равнялось 1, то в последнее, 12-е прохождение цикла, k = 25; условие цикла ложно)
s:=0; k:=1; while k < 25 do begin ...
1 + 3 + 5 + 7 ... количество членов прогрессии - 12, т.к. 12 итераций цикла
s = ((2 * a1 + d * (n — 1)) / 2) * n
где a1 — первый член прогрессии,
d — разность,
n — количество членов прогрессии (в нашем случае — кол-во итераций цикла)
(2 * 1 + 2 * 11) / 2 * 12 = 144
144+3 = 147
📹 Видео
Государственный выпускной экзамен ГВЭ 2019 (информатика ГВЭ ФИПИ, № 15):
Запишите число, которое будет напечатано в результате выполнения программы:
Паскаль:
1 2 3 4 5 6 7 8 9 10 11 |
var n, s: integer; begin n := 1; s := 0; while n <= 1000 do begin s := s + n; n := n * 2 end; write(s) end. |
Бейсик:
DIM N, S AS INTEGER N = 1 S = 0 WHILE N <= 1000 S = S + N N = N * 2 WEND PRINT S |
Python:
n = 1 s = 0 while n <= 1000: s = s + n n = n * 2 print(s) |
С++:
#include <iostream> using namespace std; int main() { int n = 1, s = 0; while (n <= 1000) { s = s + n; n = n * 2; } cout << s << endl; return 0; } |
Ответ: 1023
✍ Показать решение:
- Условие цикла зависит от переменной n, которая изменяется в цикле согласно получению степеней двойки:
Рассмотрим алгоритм:
1 2 4 8 16 32 64 128 256 512 1024
1.
[ S_{n} = frac {b_1-b_{n}*q}{1-q} ]
2.
[ S_{n} = b_{1} * frac {1-q^n}{1-q} ]
[ S_{n} = frac {1-512*2}{1-2} =1023 ]
[ S_{n} = 1 * frac {1-2^{10}}{1-2}=1023 ]
Программирование: массивы и матрицы
Наибольшее или наименьшее значение переменной s (сумматор)
Досрочный экзамен 2020 г., вариант 1:
В программе используется одномерный целочисленный массив A с индексами от 0 до 11. Значения элементов массива A[i] приведены в таблице.
i | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 |
---|---|---|---|---|---|---|---|---|---|---|---|---|
A[i] | 14 | 13 | 15 | 8 | 4 | 12 | 30 | 21 | 22 | 16 | 5 | 9 |
Определите значение переменной s после выполнения следующего фрагмента этой программы
Язык программирования Паскаль:
s := 0; n := 1; for i := 0 to 11 do if A[i] > A[n] then s := s + A[i] + i else A[n] := A[i];
Бейсик:
s = 0 n = 1 FOR i = 0 TO 11 IF A(i) > A(n) THEN s = s + A(i) + i ELSE A(n) = A(i) END IF NEXT i |
Python:
s = 0 n = 1 for i in range(0, 12): if A[i] > A[n]: s += A[i] + i else: A[n] = A[i] |
С++:
s = 0; n = 1; for (int i = 0; i < 12; i++) { if (A[i] > A[n]) s += A[i] + i; else A[n] = A[i]; } |
Ответ: 202
Показать решение:
Результат: 202
📹 Видео
6_16:
В программе описан одномерный целочисленный массив А с индексами от 0 до 10.
Язык программирования Паскаль:
s:=0; n:=10; for i:=0 to n-1 do begin s:= s + A[i] + A[i+1] end;
В начале выполнения этого фрагмента в массиве находились двухзначные четные натуральные числа.
Какое наибольшее значение может иметь переменная s после выполнения данной программы?
Ответ: 1960
✍ Показать решение:
Рассмотрим алгоритм фрагмента программы:
- Цикл выполняется 10 раз: от 0 до 9 (т.к. n-1).
- В цикле повторяется операция, суммирующая два подряд идущих элемента массива, — текущего и следующего:
A[i] + A[i+1]
s = 0 + 98 + 98 = 196
s = 196 + 98 + 98
196 * 10 = 1960
📹 Видео
6_17:
В программе описан одномерный целочисленный массив А с индексами от 0 до 10.
Язык программирования Паскаль:
s:=1; n:=10; for i:=1 to 5 do begin s:= s * A[i] * A[n-i+1] end;
В начале выполнения этого фрагмента в массиве находились однозначные четные натуральные числа.
Какое наименьшее значение может иметь переменная s после выполнения данной программы?
Ответ: 1024
✍ Показать решение:
Рассмотрим алгоритм фрагмента программы:
- Цикл выполняется 5 раз: от 1 до 5.
- В цикле повторяется операция произведения двух элементов массива:
A[i] * A[n-i+1]
1 шаг: A[1]*A[10] 2 шаг: A[2]*A[9] 3 шаг: A[3]*A[8] 4 шаг: A[4]*A[7] 5 шаг: A[5]*A[6]
s = 1 * 2 * 2 = 4
s = 4 * 2 * 2 = 16 ...
45 = 1024
📹 Видео
Перестановка в массиве. Определить значение переменной
6 (19) задание. Демоверсия ЕГЭ 2018 информатика:
В программе используется одномерный целочисленный массив A с индексами от 0 до 9. Значения элементов равны 3, 0, 4, 6, 5, 1, 8, 2, 9, 7 соответственно, т.е. A[0] = 3, A[1] = 0 и т.д.
Определите значение переменной c после выполнения следующего фрагмента этой программы:
1 2 3 4 5 6 7 8 9 |
c := 0; for i := 1 to 9 do if A[i-1] > A[i] then begin c := c + 1; t := A[i]; A[i] := A[i-1]; A[i-1] := t; end; |
Ответ: 5
✍ Показать решение:
Результат: 5
📹 Видео
6_19:
В программе используется одномерный целочисленный массив A с индексами от 0 до 9. Значения элементов равны 1, 3, 4, 7, 2, 9, 1, 2, 3, 0 соответственно, т.е. A[0] = 1, A[1] = 3 и т.д.
Определите значение переменной c после выполнения следующего фрагмента этой программы:
1 2 3 4 5 6 7 8 9 |
c := 0; for i := 1 to 9 do if A[i] > A[0] then begin c := c + 1; t := A[i]; A[i] := A[0]; A[0] := 2*t; end; |
Ответ: 2
✍ Показать решение:
- Рассмотрим изменение всех переменных и элементов массива для каждой итерации (прохода) цикла:
№ | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 |
i | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 |
if | 3>4 true |
4>6 false |
7>6 true |
2>14 false |
9>14 false |
1>14 false |
2>14 false |
3>14 false |
0>14 false |
c | 1 | — | 2 | — | — | — | — | — | — |
t | 3 | — | 7 | — | — | — | — | — | — |
A[i] | 1 | 6 | |||||||
A[0] | 6 | — | 14 | — | — | — | — | — | — |
📹 Видео
6_20:
В программе используется одномерный целочисленный массив A с индексами от 0 до 9. Значения элементов равны 0, 7, 1, 3, 2, 1, 8, 9, 6, 3 соответственно, т.е. A[0] = 0, A[1] = 7 и т.д.
Определите значение переменной j после выполнения следующего фрагмента этой программы:
1 2 3 4 5 6 7 8 |
j:=9; while A[j] + A[j-1] > 4 do begin t:=A[j]; A[j]:=A[j-1]; A[j-1]:=t; j:=j-1; end; |
Ответ: 6
✍ Показать решение:
- В задании используется цикл while — с предусловием. Такой цикл выполняется пока условие истинно.
- В условии цикла сумма каждого элемента массива с предыдущим, начиная с девятого (
j=9
), сравнивается с числом 4: если сумма элементов больше 4 то цикл выполняется.
Для первой итерации цикла имеем: while A[9] + A[8] > 4 do ...
j:=j-1
).A[9]+A[8] = 3+6 > 4 - да, значит обмен: A[9]=6 A[8]=3, j=8
A[8]+A[7] = 3+9 > 4 - да, значит обмен: A[8]=9 A[7]=3, j=7
A[7]+A[6] = 3+8 > 4 - да, значит обмен: A[7]=8 A[6]=3, j=6
A[6]+A[5] = 3+1 > 4 - нет, цикл прекращает свою работу
Разбор досрочного ЕГЭ по информатике 2019:
В программе используется одномерный целочисленный массив A с индексами от 0 до 11. Значения элементов равны 20, 19, 33, 21, 42, 13, 12, 24, 4, 22, 6, 10, т.е. A[0]=20, A[1]=19 и т.д.
Определите значение переменной s после выполнения следующего фрагмента этой программы:
1 2 3 4 5 6 7 8 9 |
n := 1; s := 1; for i := 1 to 11 do if A[i] < A[n] then begin s := s * i; t := A[i]; A[i] := A[n]; A[n] := t; end; |
Типовые задания для тренировки — демоверсия ЕГЭ информатика 2020
Ответ: 240
📹 Видео
6_22:
В программе используется одномерный целочисленный массив A с индексами от 0 до 9. Значения элементов равны 21, 16, 7, 12, 18, 3, 8, 13, 11, 17, т.е. A[0]=21, A[1]=16 и т.д.
Определите значение переменной s после выполнения следующего фрагмента этой программы:
Паскаль:
1 2 3 4 5 6 7 8 9 10 11 |
s := 0; n := 4; for i:=0 to 9 do if A[i] <= A[n] then begin s := s + A[i]; t := A[i]; A[i] := A[n]; A[n] := t; n := i mod 3; end; writeln(s); |
Бейсик:
s=0: n=4 FOR k=1 to 10 IF A(i) <= A(n) THEN s = s + A(i) t = A(i) A(i) = A(n) A(n) = t n = i MOD 3 END IF NEXT k PRINT S END |
Python:
s = 0 n = 4 for i in range(10): if A[i] <= A[n]: s = s + A[i] t = A[i] A[i] = A[n] A[n] = t n = i % 3 print(s) |
С++:
s = 0; n = 4; for (i=0; i<=9; i++) if (A[i]<=A[n]) { s+=A[i]; t=A[i]; A[i]=A[n]; A[n]=t; n=i%3; } cout << s; |
Типовые задания для тренировки
Ответ: 75
Показать решение:
- Рассмотрим алгоритм. Построим трассировочную таблицу, каждая строка которой — очередная итерация цикла.
- При последнем изменении s стало равным 75.
i | <= ? | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | s | n |
21 | 16 | 7 | 12 | 18 | 3 | 8 | 13 | 11 | 17 | 0 | 4 | ||
0 | 21<=18 нет |
21 | 18 | ||||||||||
1 | 16<=18 да |
16 18 |
18 16 |
16 | 1 mod 3 = 1 | ||||||||
2 | 7<=18 да |
18 7 |
7 18 |
16+7=23 | 2 mod 3 = 2 | ||||||||
3 | 12<=18 да |
18 12 |
12 18 |
23+12=35 | 3 mod 3 = 0 | ||||||||
4 | 16<=21 да |
21 16 |
16 21 |
35+16=51 | 4 mod 3 = 1 | ||||||||
5 | 3<=7 да |
7 3 |
3 7 |
51+3=54 | 5 mod 3 = 2 | ||||||||
6 | 8<=12 да |
12 8 |
8 12 |
54+8=62 | 6 mod 3 = 0 | ||||||||
7 | 13<=16 да |
16 13 |
13 16 |
62+13=75 | 7 mod 3 = 1 | ||||||||
8 | нет | 3 | 11 | ||||||||||
9 | нет | 13 | 17 |
📹 Видео
6_23:
В результате выполнения программы напечатано число 6.
Какое наибольшее значение может иметь переменная S после выполнения программы?
Паскаль:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 |
var k, m, S, N: integer; Dat: array[1..100] of integer; begin N:= 5; m := 0; S := 0; for k := 1 to N do readln(Dat[k]); for k := 1 to N do begin S := S + 2 * Dat[k]; if Dat[k]>m then begin m := Dat[k] end end; writeln(m) end. |
Бейсик:
N=5 m=0 S=0 FOR k=1 to N INPUT Dat(k) NEXT k FOR k=1 to N S = S + 2 * Dat(k) IF Dat(k) > m THEN m = Dat(k) END IF NEXT k PRINT m END |
Python:
Dat = [0]*100 N = 5 m = S = 0 for k in range(0, N): Dat[k] = int(input()) for k in range(0, N): S += 2 * Dat[k] if Dat[k] > m: m = Dat[k] print(m) |
С++:
#include <iostream> using namespace std; int main() { int Dat[100]; int N = 5; int k, m = 0, S = 0; for(k=0; k<N; k++) cin >> Dat[k]; for(k=0; k<N; k++) { S += 2 * Dat[k]; if (Dat[k]>m) m = Dat[k]; } cout << m; return 0; } |
Ответ: 60
Показать решение:
-
Рассмотрим алгоритм.
- В конце программы видим, что на экран выводится значение переменной m. То есть после выполнения всего алгоритма m станет равным 5. Запомним это.
- Изначально переменная N равна значению 5:
- В первом цикле формируются значения для пяти элементов массива:
- Во втором цикле видим условие, в котором каждый из пяти элементов массива будет сравниваться с m. Если элемент больше m, то в m сохранится значение этого элемента:
- Исходя из первого нашего пункта имеем, что наибольшее значение из пяти элементов массива — это значение 6. Так как в результате
m = 6
. - В цикле помимо условия находится сумматор, который суммирует
2 * Dat[k]
. В задании необходимо определить наибольшее значение S, значит, выгодно, чтобы элементы массивов имели максимальное возможное значение. - Предположим, что все пять элементов массива равны 6. Тогда m после прохождения цикла останется равной 6. То есть результат будет верным.
- Посчитаем S в цикле:
for k := 1 to N do readln(Dat[k]);
if Dat[k]>m then begin m := Dat[k] end
S := 0 + 2 * 6 + 2 * 6 + 2 * 6 + 2 * 6 + 2 * 6 = 12 * 5 = 60
📹 Видео
Автор материалов — Лада Борисовна Есакова.
Для решения этой задачи нужно знать основные конструкции языка программирования:
— Объявление переменных;
— Оператор присваивания;
— Оператор вывода;
— Операторы цикла.
Кроме этого, пригодятся математические формулы:
n-го члена арифметической прогрессии ,
суммы n членов геометрической прогрессии.
Пример 1.
Запишите число, которое будет напечатано в результате выполнения программы. Для Вашего удобства программа представлена на пяти языках программирования.
Бейсик |
Python |
DIM S, N AS INTEGER
S = 47 N = 1 WHILE S > 0 S = S — 9 N = N + 4 WEND PRINT(N) |
s = 47
n = 1 while s > 0: s = s — 9 n = n + 4 print(n) |
Паскаль |
Алгоритмический язык |
var s, n: integer;
begin s := 47; n := 1; while s > 0 do begin s := s — 9; n := n + 4 end; writeln(n) end. |
алг
нач цел s, n s := 47 n := 1 нц пока s > 0 s := s — 9 n := n + 4 кц вывод n кон |
Си |
|
#include <stdio.h>
void main() { int s, n; s = 47; n = 1; while (s > 0) { s = s – 9; n = n + 4; } printf(«%dn», n); } |
Решение:
Цикл while выполняется до тех пор, пока истинно условие s > 0, т. е. переменная s определяет, сколько раз выполнится цикл. Поскольку изначально s = 47, а затем уменьшается на 9, цикл выполнится 6 раз, следовательно, n = 6 · 4 + 1 = 25.
Ответ: 25
Пример 2.
Запишите число, которое будет напечатано в результате выполнения следующей программы. Для Вашего удобства программа представлена на пяти языках программирования.
Бейсик |
Python |
DIM S, N AS INTEGER
S = 0 N = 0 WHILE S < 111 S = S + 8 N = N + 2 WEND PRINT N |
s = 0
n = 0 while s < 111: s = s + 8 n = n + 2 print(n) |
Паскаль |
Алгоритмический язык |
var s, n: integer;
begin s := 0; n := 0; while s < 111 do begin s := s + 8; n := n + 2 end; writeln(n) end. |
алг
нач цел n, s n := 0 s := 0 нц пока s < 111 s := s + 8 n := n + 2 кц вывод n кон |
Си |
|
#include
int main() { int s = 0, n = 0; while (s < 111) { s = s + 8; n = n + 2; } printf(«%dn», n); return 0; } |
Решение:
Цикл while выполняется до тех пор, пока истинно условие s < 111, т. е. переменная s определяет, сколько раз выполнится цикл. Поскольку изначально s = 0, а затем увеличивается на 8, цикл выполнится 14 раз, следовательно, n = 2 * 14 = 28.
Ответ: 28
Пример 3.
Запишите число, которое будет напечатано в результате выполнения программы. Для Вашего удобства программа представлена на пяти языках программирования.
Бейсик |
Python |
DIM S, N AS INTEGER
S = 301 N = 0 WHILE S > 0 S = S — 10 N = N + 2 WEND PRINT N |
s = 301
n = 0 while s > 0: s = s — 10 n = n + 2 print(n) |
Паскаль |
Алгоритмический язык |
var s, n: integer;
begin s := 301; n := 0; while s > 0 do begin s := s — 10; n := n + 2 end; writeln(n) end. |
алг
нач цел n, s s := 301 n := 0 нц пока s > 0 s := s — 10 n := n + 2 кц вывод n кон |
Си |
|
#include <stdio.h>
int main() { int s = 301, n = 0; while (s > 0) { s = s — 10; n = n + 2; } printf(«%dn», n); return 0; } |
Решение:
Заметим, что после 30 итераций цикла s = 1, а n = 60. После 31 итерации станет s = -9, n = 62, и цикл прекратится.
Ответ: 62
Благодарим за то, что пользуйтесь нашими публикациями.
Информация на странице «Задача №8. Анализ программы с циклами.» подготовлена нашими авторами специально, чтобы помочь вам в освоении предмета и подготовке к экзаменам.
Чтобы успешно сдать необходимые и поступить в высшее учебное заведение или колледж нужно использовать все инструменты: учеба, контрольные, олимпиады, онлайн-лекции, видеоуроки, сборники заданий.
Также вы можете воспользоваться другими материалами из данного раздела.
Публикация обновлена:
08.05.2023