Таблица значений функции
Просмотров 5.2к. Обновлено 29 октября 2021
- Получить с клавиатуры значения x1 (минимум x), x2 (максимум x) и up (шаг).
- Пока x1 не превысит x2 выполнять следующие действия:
- вычислить значение y,
- вывести на экран текущие значения x1 и y,
- увеличить значение x1 на значение шага (up).
Pascal
var
x1,x2,up,y: real;
begin
readln(x1,x2,up);
while x1 <= x2 do begin
y := -0.23*x1*x1 + x1;
writeln(x1:5:2,' -> ',y:5:2);
x1 := x1 + up;
end;
end.
1
5
0.5
1.00 -> 0.77
1.50 -> 0.98
2.00 -> 1.08
2.50 -> 1.06
3.00 -> 0.93
3.50 -> 0.68
4.00 -> 0.32
4.50 -> -0.16
5.00 -> -0.75
Язык Си
#includemain() {
float x1,x2,up,y;
scanf("%f%f%f", &x1,&x2,&up);
while (x1 <= x2) {
y = -0.23 * x1 * x1 + x1;
printf("%5.2f -> %5.2fn", x1, y);
x1 += up;
}
}
-1
5
0.8
-1.00 -> -1.23
-0.20 -> -0.21
0.60 -> 0.52
1.40 -> 0.95
2.20 -> 1.09
3.00 -> 0.93
3.80 -> 0.48
4.60 -> -0.27
Python
Составить таблицу значений функции Python
x1 = float(input())
x2 = float(input())
up = float(input())
while x1 <= x2:
y = -0.23 * x1**2 + x1
print("%5.2f -> %5.2f" % (x1, y))
x1 += up
5
10
1
5.00 -> -0.75
6.00 -> -2.28
7.00 -> -4.27
8.00 -> -6.72
9.00 -> -9.63
10.00 -> -13.00
КуМир
алг таблица значений функции
нач
вещ x1, x2, up, y
ввод x1, x2, up
нц пока x1 <= x2
y := -0.23*x1**2 + x1
вывод x1, " -> ", y, нс
x1 := x1 + up
кц
кон
-1 1 0.2
-1 -> -1.23
-0.8 -> -0.9472
-0.6 -> -0.6828
-0.4 -> -0.4368
-0.2 -> -0.2092
-5.551115e-17 -> -5.551115e-17
0.2 -> 0.1908
0.4 -> 0.3632
0.6 -> 0.5172
0.8 -> 0.6528
1 -> 0.77
Basic-256
input x1
input x2
input up
decimal 2
while x1 <= x2
y = -0.23 * x1^2 + x1
print x1 + " -> " + y
x1 = x1 + up
endwhile
2.3
2.8
0.08
2.3 -> 1.08
2.38 -> 1.08
2.46 -> 1.07
2.54 -> 1.06
2.62 -> 1.04
2.7 -> 1.02
2.78 -> 1
1.2. Вычисление таблицы значений функции одного аргумента.
Составить программу вычисления таблицы значений функции f(x) для N значений аргумента X, равномерно распределенных на отрезке [A,B].
#include <iostream> #include <cmath> using namespace std; int main ()
{
const double PI=3.14; double n,x,y,t,A,B,N; cout<<«nVvedite A,B,N:»; cin>>A>>B>>N;
x=A;
t=0;
for (n=1; n<=N; n++) { x=x+t;
if (x==(1/3)) {
cout<<«tn=» << n << «tx=» << x << «ty net» << endl;
}
else { y=log(sqrt(PI+abs(2-x)))/(3-1/x)+pow(x,1.5)*sin(1.4*x); cout<<«tn=» << n << «tx=» << x << «ty=» << y << endl;
}
t=abs(B-A)/(N-1);
}
}
1.3.2 Накопление сумм и произведений.
Составить программу для вычисления результата по формуле. Для проверки программы задать
X=0,5; n=20.
#include <iostream> #include <cmath> using namespace std; int main()
{
float x,y,s,i; int k,n;
cout<<«Vvedite n,x:n»; cin>>n>>x;
s=0;
for (k=1; k<=n; k++) { y=log(fabs(x+k))*log(fabs(x+k))*cos((k*k+x)/n); s=s+y;
}
i=exp(0.5*x)*s/3;
cout<<«itog=»<<i;
system(«pause»);
}
1.4.2 Обработка одномерных массивов с использований ветвлений в теле цикла.
Разработать программу обработки одномерных массивов, используя единственный цикл.
Найти среднее арифметическое не равных нулю элементов заданного массива X1,X2,…,Xn и подсчитать число элементов с неотрицательными значениями (включая и равные нулю).
Первый вариант решения:
1
#include <iostream> using namespace std; int main ()
{
float X[50]; float s,sr; int k,i,n,N;
cout<<«Vvedite Nn»;
cin>>N;
cout<<«nVvedite massiv X iz N elementovn»; s=0;
i=0;
k=0;
for (n=0; n<N; n++) { cin>>X[n];
if (X[n]>=0) k=k+1;
if (X[n]!=0)
{
s=s+X[n];
i=i+1;
}
}
sr=s/i;
cout<<«srednee ar=»<<sr<<» chislo neotr=»<<k; system («pause»);
return 0;
}
Второй вариант решения (с использованием указателей):
#include <iostream> using namespace std; int main ()
{
float X[50]; float s,sr; int k,i,n,N;
cout<<«Vvedite Nn»;
cin>>N;
cout<<«nVvedite massiv X iz N elementovn»; s=0;
i=0;
k=0;
for (n=0; n<N; n++) cin>>*(X+n);
for (n=0; n<N; n++) { if (*(X+n)>=0) k=k+1;
if (*(X+n)!=0)
{
s=s+*(X+n);
i=i+1;
}
}
sr=s/i;
cout<<«srednee ar=»<<sr<<» chislo neotr=»<<k; system («pause»);
}
1.4.3 Нахождение экстремальных элементов в одномерных массивах.
Составить программу нахождения заданного экстремального элемента или его порядкового номера при заданном одномерном массиве А из n элементов.
Определить номер наибольшего из значений:
2
Первый вариант решения:
#include <iostream> #include <cmath> using namespace std; int main ()
{
float A[50]; float y,ymax; int i,N,nmax;
cout<<«Vvedite Nn»;
cin>>N;
cout<<«nVvedite N elementov massiva An»; for (i=0; i<N; i++)
cin>>A[i]; ymax=sqrt(exp(A[0]))-A[0]*A[0]; nmax=0;
for (i=1; i<N; i++)
{ y=sqrt(exp(A[i]))-A[i]*A[i]; if (ymax<y)
{
ymax=y;
nmax=i;
}
}
cout<<«nmax=»<<nmax; system («pause»);
}
Второй вариант решения (с использованием указателей):
#include <iostream> #include <cmath> using namespace std; int main ()
{
float *A; float y,ymax; int i,N,nmax;
cout<<«Vvedite Nn»;
cin>>N;
A=new float [N];
cout<<«nVvedite N elementov massiva An»; for (i=0; i<N; i++)
cin>>*(A+i); ymax=sqrt(exp(*A))-(*A)*(*A); nmax=0;
for (i=1; i<N; i++)
{
y=sqrt(exp(*(A+i)))-(*(A+i))*(*(A+i)); if (ymax<y)
{
ymax=y;
nmax=i;
}
}
cout<<«nmax=»<<nmax; delete [] A;
system («pause»);
}
1.5 Вычисление функции разложением ее в ряд.
3
Составить программу нахождения суммы ряда с заданной точностью E. Использовать рекуррентные соотношения при вычислении очередного элемента ряда. Для оценки правильности результата предусмотреть вычисление по контрольной формуле.
Вычисление суммы заканчивается, если модуль очередного слагаемого оказывается меньше заданного значения допустимой погрешности E, причем для этих рядов (при |X|< 1), абсолютная величина суммы всех отброшенных членов ряда при этом оказывается меньше E.
#include <iostream> #include <cmath> using namespace std; int main ()
{
float x,eps,fx,fx1,t; int i;
cout<<«Vvedite x, eps: n»; cin>>x>>eps;
fx=0;
i=1;
t=x*x;
while (fabs(t)>eps)
{
fx=fx+t;
i=i+1; t=-t*x*(2*i-3)/(2*i+2);
}
fx1=8*(sqrt(pow(1+x,3))-1)/3-4*x; cout<<«fx=»<<fx<<» fx1=»<<fx1; system («pause»);
}
1.6. Вычисление таблицы значений функции одного аргумента с выбором формулы.
Составить программу вычисления N значений функции Y для X, изменяющегося от X1 с шагом dX. Для проверки правильности программы задать значения для A, X1 и dX из таблицы.
#include <iostream> #include <cmath> using namespace std; int main()
{
float x1,A,x,dx,y; int N,i;
cout<<«Vvedite A,N= «; cin>>A>>N;
x1=0;
dx=A/2;
cout<<«Argument x Function yn»; x=x1;
4
for (i=1; i<=N; i++) { if (x<(4*A))
y=sqrt(16*A*A-(x-4*A)*(x-4*A));
else y=8*A*A*A/fabs((x-4*A)*(x-4*A)+4*A*A); cout<<fixed<<x<<» «<<y<<‘n’;
x=x+dx;
}
system(«pause»);
}
2.1 Табулирование функции двух переменных.
Составить программу для вычисления таблицы значений заданной функции для N значений X, меняющихся от Xнач с заданным шагом HX, и M значений Z, меняющихся от Zнач с шагом HZ.
#include <iostream> #include <cmath> using namespace std; int main()
{
float x1,z1,x,hx,z,hz,y; int N,i,M,j;
cout<<«Vvedite x1,hx,N: «; cin>>x1>>hx>>N; cout<<«Vvedite z1,hz,M: «; cin>>z1>>hz>>M;
cout<<«Argument x Argument z Function yn»; x=x1;
for (i=1; i<=N; i++) { z=z1;
for (j=1; j<=M; j++)
{
y=(pow(log(z),(2/3))+tan(sqrt(x*z)))*fabs(log(z/5)+1/3); cout<<fixed<<x<<» «<<z<<» «<<y<<‘n’;
z=z+hz;
}
x=x+hx;
}
system(«pause»);
}
2.5.1 Обработка матриц с небольшим количеством строк или столбцов.
Составить программу для решения задачи с использованием двумерных массивов (матриц).
Дана матрица из 2 столбцов и 10 строк. Первый элемент каждой строки представляет диаметр внутренней, а второй — диаметр внешней окружности кольца. Отпечатать внешние диаметры тех колец, площадь которых больше площади прямоугольника с заданными сторонами, и число таких колец.
#include <iostream> #include <cmath> using namespace std; int main ()
{
float A[10][2]; float a,b,d; int i,j,s;
cout<<«Vvedite a,bn»; cin>>a>>b;
cout<<«nVvedite 10*2 elementov matricy An»; for (i=0; i<10; i++)
for (j=0; j<2; j++) cin>>A[i][j]; s=0;
5
for (i=0; i<10; i++)
{if (M_PI*A[i][1]*A[i][1]/4-M_PI*A[i][0]*A[i][0]/4>a*b) {d=A[i][1];
cout<<«d=»<<d<<‘n’;
s=s+1;
}
}
cout<<«ns=»<<s; return 0;
system («pause»);
}
2.5.2 Обработка массивов переменной длины.
Дана матрица, состоящая из n строк и n столбцов или одномерные массивы из n элементов каждый. Составить программу для получения и вывода указанных в условии результатов и самих массивов, если изменялись какие-либо их элементы. Алгоритм любой задачи может быть составлен с использованием единственного двукратного цикла.
Заменить в матрице на 1 каждый положительный элемент, на 0 — каждый отрицательный. Для каждого столбца найти среднее арифметическое исходных значений элементов.
#include <iostream> using namespace std; int main ()
{
float A[50][50]; float sum,srednee; int i,j,n;
cout<<«Vvedite nn»;
cin>>n;
cout<<«nVvedite n*n elementov matricy An»; for (i=0; i<n; i++)
for (j=0; j<n; j++) cin>>A[i][j];
for (j=0; j<n; j++)
{
sum=0;
for (i=0; i<n; i++)
{
sum=sum+A[i][j]; if (A[i][j]>0) A[i][j]=1;
else
if (A[i][j]<0) A[i][j]=0;
}
srednee=sum/n;
cout<<«srednee stolbca=»<<srednee<<‘n’;
}
for (i=0; i<n; i++)
6
{
for (j=0; j<n; j++) cout<<A[i][j]<<» «; cout<<‘n’;
}
system («pause»);
}
2.5.3 Разработка алгоритмов и программ нисходящим способом.
Разработать программу нисходящим способом, предполагая заданной матрицу A из 5 строк и 5 столбцов или одномерные массивы указанной длины.
Кроме матрицы A, даны элементы C1,C2,…,C5. Если значения всех этих элементов заключены между заданными значениями P и T, получить значения элементов X1,X2,…, X5 по формуле:
#include <iostream> using namespace std; int main ()
{
float A[5][5],C[5],X[5]; float P,T;
int istina,i,k;
cout<<«Vvedite posledovatelnost Cn»; for (i=0; i<5; i++)
cin>>C[i]; cout<<«Vvedite P,Tn»; cin>>P>>T;
cout<<«nVvedite 5*5 elementov matricy An»; for (i=0; i<5; i++)
for (k=0; k<5; k++) cin>>A[i][k]; istina=0;
for (i=0; i<5; i++) if (P<C[i])
if (C[i]<T) istina=istina+1; if (istina==5)
for (i=0; i<5; i++)
{
X[i]=0;
for (k=0; k<5; k++) X[i]=X[i]+A[i][k]; cout<<«X[«<<i<<«]=»<<X[i]<<‘n’;
7
}
return 0;
system («pause»);
}
4.2.3 Использование имени массива как параметра функции.
Для получения результата составить функцию, входными параметрами которой являются два массива X1,X2, …,Xn и Y1,Y2,…,Yn с заданным числом n элементов (или один из них) или матрица А из n строк и n столбцов. Кроме этого, разработать основную программу для отладки составленной функции.
Общее количество нулей в i-й и последней строке, i-м и последнем столбце матрицы A.
#include <iostream> using namespace std;
float FunctionNuli(float A[10][10], int i, int n)
{
int j,strokai,stolbeci,strokan,stolbecn,summa; strokai=0;
for (j=0; j<n; j++) if (A[i][j]==0) strokai++; stolbeci=0;
for (j=0; j<n; j++) if (A[j][i]==0) stolbeci++; strokan=0;
for (j=0; j<n; j++) if (A[n-1][j]==0) strokan++; stolbecn=0;
for (j=0; j<n; j++) if (A[j][n-1]==0) stolbecn++;
summa=strokai+stolbeci+strokan+stolbecn; if (A[i][i]==0)
summa—;
if (A[n-1][n-1]==0) summa—;
if (A[i][n-1]==0) summa—;
if (A[n-1][i]==0) summa—; return summa;
}
int main ()
{
float X[10][10],Y[10][10];
int x,y,i,j,summaX,summaY,g1,g2; cout<<«Vvedite nomer stroki g1n»; cin>>g1;
cout<<«Vvedite xn»; cin>>x;
cout<<«nVvedite x*x elementov matricy Xn»; for (i=0; i<x; i++)
for (j=0; j<x; j++) cin>>X[i][j];
cout<<«Vvedite nomer stroki g2n»; cin>>g2;
cout<<«Vvedite yn»; cin>>y;
cout<<«nVvedite y*y elementov matricy Xn»; for (i=0; i<y; i++)
8
for (j=0; j<y; j++) cin>>Y[i][j];
summaX=FunctionNuli(X,g1,x);
summaY=FunctionNuli(Y,g2,y);
cout<<«summaX=»<<summaX<<‘n’;
cout<<«summaY=»<<summaY<<‘n’; system («pause»);
}
4.2.4 Использование формальных массивов в процедурах.
Составить процедуру, входными параметрами которой является матрица А из n строк и n столбцов, либо два массива B1,B2,…,Вn; C1,C2,…,Cm, либо один из них. Для проверки составленной процедуры разработать основную программу.
Значения наименьших элементов строк матрицы A. #include <iostream>
using namespace std;
void Naim(float A[10][10], int n, float Naim[10])
{float Q; int i,j;
for (i=1;i<n;i++)
{Q=A[i][0];
for (j=1;j<n;j++) if (A[i][j]<Q) Q=A[i][j]; Naim[i]=Q;
}
}
int main ()
{ float B[10][10],C[10][10],Q1[10],Q2[10]; int b,c,i,j;
cout<<«Vvedite bn»; cin>>b;
cout<<«nVvedite b*b elementov matricy Bn»; for (i=0; i<b; i++)
for (j=0; j<b; j++) cin>>B[i][j]; cout<<«Vvedite cn»; cin>>c;
cout<<«nVvedite c*c elementov matricy Cn»; for (i=0;i<c;i++)
for (j=0; j<c; j++) cin>>C[i][j]; Naim(B,b,Q1); cout<<«Q1″<<‘n’; for (i=0; i<b; i++) cout<<Q1[i]<<‘n’;
9
Naim(C,c,Q2);
cout<<«Q2″<<‘n’; for (i=0; i<c; i++) cout<<Q2[i]<<‘n’; system («pause»);
}
4.2.5 Разработка подпрограммы с дальнейшим использованием ее по заданию.
Разработайте программу, создав предварительно подпрограмму (функцию или процедуру) с учетом условия задачи. Приведенные числа используйте для задания типов элементов и размеров массивов. Составить подпрограмму для определения минимального элемента матрицы. Используя данную подпрограмму, определить значение минимального элемента заданной матрицы Q и, если оно отлично от нуля, увеличить каждый элемент главной диагонали матрицы на модуль этого значения. В противном случае вывести сообщение “Элемент не равен нулю”.
#include <iostream> #include <cmath> using namespace std;
float Naim(float A[15][15], int n) { float naim;
int i,j; naim=A[0][0]; for (i=0;i<n;i++) for (j=0;j<n;j++) if (A[i][j]<naim) naim=A[i][j]; return naim;
}
int main ()
{
float Q[15][15]; float naim;
int x,i,j; cout<<«Vvedite xn»; cin>>x;
cout<<«nVvedite x*x elementov matricy Qn»; for (i=0; i<x; i++)
for (j=0; j<x; j++) cin>>Q[i][j]; naim=Naim(Q,x); cout<<«naim=»<<naim<<‘n’; if (naim==0)
10
Соседние файлы в предмете Программирование на C++
- #
- #
0 / 0 / 0 Регистрация: 30.11.2017 Сообщений: 4 |
|
1 |
|
Составить программу расчета таблицы значений функции30.11.2017, 23:31. Показов 7446. Ответов 1
Составить программу расчета таблицы значений функции f(x) на интервале a<=x<=b в n равностоящих точках. Границы интервала a,b и количество точек n ввести с клавиатуры. Результаты вывести на печать.
0 |
Ivandur 683 / 4695 / 262 Регистрация: 11.08.2016 Сообщений: 3,023 |
||||
01.12.2017, 13:42 |
2 |
|||
Решение
Примерно так…
1 |
IT_Exp Эксперт 87844 / 49110 / 22898 Регистрация: 17.06.2006 Сообщений: 92,604 |
01.12.2017, 13:42 |
2 |
Цель работы
Изучение
аппарата макросредств ассемблера и получение навыков разработки и использования
макроопределений.
Лабораторное задание
Разработать программу вычисления таблицы значений
функции y = f (a, b, c, d, e) при изменении одного из ее аргументов в
соответствии с заданной зависимостью. Обеспечить вывод на экран вида
табулируемой функции, значений неизменяемых аргументов и результатов вычислений
в виде пар: “значение варьируемого аргумента – значение функции”.
Методические указания
Значения
всех аргументов, в том числе и начальное значение варьируемого аргумента,
следует задать в программе. Значения варьируемого аргумента, а также
соответствующие значения функции должны быть представлены в виде массивов. Составить
макросы для каждого поддиапазона изменения индекса i, а также для вычисления
значения функции. В программе необходимо использовать макросы общего вида и
специальные макросы.
Для каждого варианта указана изменяемая переменная
(ai, bi, ci, di или ei)
как функция индекса i. Вид этой функции различен для разных поддиапазонов
изменения индекса i (1..5, 6..10):
Изм-ая |
i=1…5 |
i=6…10 |
bi |
8-(i+2) |
3*(i-1) |
.
Листинг
Asm6.cpp
#include <stdio.h>
#include <conio.h>
#include <string.h>
#define one_five
_asm mov
edx, i
_asm add
edx, 2
_asm mov
ebx, 8
_asm sub
ebx, edx
//8-(i+2)
#define six_ten
_asm mov
eax, i
_asm sub
eax, 1
_asm imul
eax, 3
_asm mov
ebx, eax
//3*(i-1)
#define myfunc
_asm mov
eax, a
_asm add
eax, b
_asm cdq
_asm idiv
c
_asm imul
eax, d
_asm sub
eax, e
// y=(a+b)/c*d-e
void main()
{
struct table
{
char rezultat;
char k;
char num;
};
int a=2,
b, c=1, d=3, e=2, f;
int i=1;
table nom [10];
memset(nom, 0, sizeof(nom));
_asm
{
lea edi, nom
mov ecx,i
for_loop:
mov ebx, b
mov edx,0
cmp ecx, 5
ja lbl
one_five
jmp lbl2
lbl:
six_ten
lbl2:
mov b, ebx
myfunc
mov [edi], al
mov [edi + 1], bl
mov [edi + 2], cl
add edi, 3
inc ecx
mov i,ecx
cmp i,11
jnz for_loop
}
printf(«+—————+—-+—+n»);
printf(«| y | b
| # |n»);
printf(«+—————+—-+—+n»);
for (i=0;
i<10; i++)
{
printf(«%8d %9d %4dn»,nom[i].rezultat,nom[i].k,nom[i].num);
}
getch();
}
Результат работы
программы
Занятие 2. Исследование таблицы значений функции
Существуют специальные приемы для нахождения некоторых величин, таких как наибольшее (наименьшее) значение функции, сумма значений функции, произведение значений функции, среднее арифметическое значений функции, количество значений функции.
- Нахождение наибольшего
(наименьшего
) значения функции.
max=-10E10; for(x=xn; x<=xk; x=x+h){ f=…; if(f>max){ max=f; } }
Примечание. Если нужно найти наименьшее значение функции, то следует сделать следующие замены: «
» поменять на «
«, «
» поменять на «
«, «
» поменять на «
«.
- Нахождение суммы
значений функции
S=0; for(x=xn; x<=xk; x=x+h){ f=…; S=S+f; } cout<<"S="<<S<<endl;
- Нахождение произведения
значений функции
P=1; for(x=xn; x<=xk; x=x+h){ f=…; P=P*f; } cout<<"P="<<P<<endl;
- Нахождение среднего арифметического значения
и количества
значений функции
S=0; k=0; for(x=xn; x<=xk; x=x+h){ f=…; S=S+f; k=k+1; } S=S/k; cout<<"S="<<S<<endl; cout<<"k="<<k<<endl;
Пример 4. Вычислить таблицу «» значений функции
при
с шагом 1. Найти сумму всех значений функции; произведение значений, меньших 6; минимальное значение функции.
Решение. Расчет значений функции, вывод таблицы значений на экран, а также нахождение всех необходимых величин реализуется в цикле по . Поэтому в данной задаче будет организован один цикл по
, в теле цикла будем рассчитывать функцию, выводить на экран строку таблицы, насчитывать сумму, произведение, минимальное значение функции.
Введем обозначения:
Т.к. нужно найти произведение значений, меньших 6, то следует добавить условие «» при вычислении произведения.
Будем реализовывать цикл с предусловием, используя оператор for.
Блок-схема с предусловием: | Код программы с оператором for: |
|
// proga26.cpp: определяет точку входа для консольного приложения. // #include "stdafx.h" #include <iostream> #include <iomanip> using namespace std; int main() { double x,f,S,P,min; cout<<setw(10)<<"x"<<setw(10)<<"f"<<endl; S=0; P=1; min=10E10; for(x=0; x<=4; x=x+1){ f=2*x+1; cout<<setw(10)<<x<<setw(10)<<f<<endl; S=S+f; if(f<6){ P=P*f; } if(f<min){ min=f; } } cout<<"S="<<S<<endl; cout<<"P="<<P<<endl; cout<<"min="<<min<<endl; return 0; } |
Результат выполнения программы:
Ручной счет:
Диапазон значений х: 0, 1, 2, 3, 4. при x=0 f=2x+1=2*0+1=1; при x=1 f=2x+1=2*1+1=3; при x=2 f=2x+1=2*2+1=5; при x=3 f=2x+1=2*3+1=7; при x=4 f=2x+1=2*4+1=9; сумма всех значений:S=1+3+5+7+9=25; произведение значений, меньших 6: P=1*3*5=15; наименьшее значение функции: min=1.
Примечание. Если функция зависит от двух переменных, то следует реализовывать двумерный цикл, причем тело внутреннего цикла будет организовано так же, как в данном примере.
Пример 5. Нарисовать на экране бесконечную «змейку» символами «*».
Решение. Определим сначала внешний вид «змейки»:
Т.к. «змейка» должна быть бесконечной, то необходимо организовать бесконечный цикл. В этом случае будем использовать оператор while с всегда выполняемым условием true: while(true). Внутри этого бесконечного цикла будем рисовать один период «змейки», т.е. один холм. За счет бесконечного цикла на экране будет бесконечное число раз рисоваться наш холм.
Теперь стоит решить, какой ширины будет наша «змейка». Будем запрашивать ширину «змейки» у пользователя, т.е. с клавиатуры. Обозначим ширину переменной . Холм состоит из двух частей – расширяющейся и сужающейся. Чтобы нарисовать расширяющуюся часть, будем использовать цикл for по переменной
от 1 до
и функцию setw(i). Чтобы нарисовать сужающуюся часть, будем использовать цикл for по переменной
от
до 1 и функцию setw(i).
Таким образом, внутри бесконечного цикла while вложены последовательно два цикла for – первый с увеличением переменной цикла, второй с уменьшением.
Код программы:
// snake.cpp: определяет точку входа для консольного приложения. // #include "stdafx.h" #include <iostream> #include <iomanip> using namespace std; int main() { int i, n; cout<<"vvedi n="; cin>>n; while (true){ for(i=1; i<=n; i=i+1){ cout<<setw(i)<<"*"<<endl; } for(i=n; i>=1; i=i-1){ cout<<setw(i)<<"*"<<endl; } } return 0; }
Результат выполнения программы: при :
Краткие итоги
В любой задаче, где встречается повторение действий, необходимо использовать циклический алгоритм. От выбора оператора цикла результат не должен зависеть. Принципы вычислений таких величин, как сумма, произведение и т.д., использует циклический алгоритм в своей основе.
Упражнения
- Составьте блок-схему и программу для вычисления суммы всех целых чисел от 1 до 100 включительно.
- Постройте таблицу значений функции
при
с шагом 0,5. Определите наименьшее значение функции и значение
, при котором оно достигается.
- Составьте блок-схему и программу для вычисления таблицы значений функций
при
c шагом 1. Найдите сумму всех значений
, количество значений
, меньших 10, наимешьшее значение
, наибольшее значение
.
- Составьте блок-схему и программу для вычисления таблицы значений функции
при
c шагом 0,05; y задать с клавиатуры.
- Составьте блок-схему и программу для вычисления таблицы значений функции
при
c шагом 9,3;
c шагом 0,75. Определите наибольшее отрицательное значение функции, наименьшее положительное значение функции, произведение ненулевых значений функции, количество значений функции, больших 1 или меньших -1.
- Составьте программу, которая нарисует на экране геометрическую фигуру. Попробуйте разные варианты:
- квадрат,
- треугольник,
- прямоугольник.
Модифицируйте программу таким образом, чтобы на экране появлялась фигура заданное число раз.