Алгоритмизация и программирование I Лекция 4
Повторение
ОТВЕТ
Постановка задачи
Порядок решения задачи
Цикл с параметром
Пример 1. Посчитать сумму чисел от 1 до n.
Пример 2. Другой вариант решения
Взаимозаменяемость трех видов циклов
Взаимозаменяемость трех видов циклов
Текстовые файлы
Работа с текстовыми файлами в с С++ (потоковый)
Текстовые файлы. Запись
Режимы работы с файлом
Пример записи в текстовый файл
Текстовые файлы. Чтение
Пример чтения из файла
Пример чтения из файла (конец файла)
Задание
Решение
Задание
Решение
Задание
Решение
Пример 6. Вычислить сумму ряда S=1*2+2*4+3*8+4*16+…+n*2n
366.50K
Категория: ПрограммированиеПрограммирование

Алгоритмизация и программирование (Лекция 4)

1.

2. Алгоритмизация и программирование I Лекция 4

3.

4. Повторение


Сколько раз выполняется цикл и почему?

а)
a = 4; b = 6;
while ( a < b ) a = a + 1;

б)
a= 4; b= 6;
while ( a > b ) a ++;

в)
a= 4; b= 6;
while ( a < b ) a --;
4

5.

6. ОТВЕТ

А) 2 раза
Б) 0 раз
В) зацикливание

7. Постановка задачи

Числовым рядом называется бесконечная сумма S некоторой
последовательности.

8.

Найти сумму первых N слагаемых
Найти сумму первых слагаемых, больших заданной величины
(найти сумму с заданной точностью)
Замечание. Вычисления организовать оптимально за
минимальное число операций умножения и деления.

9.

10.

Все суммы можно
разделить на три
группы:
1)каждое слагаемое
вычисляется
самостоятельно;
2) очередное
слагаемое
вычисляется через
предыдущее;
3)часть очередного
слагаемого
вычисляется через
часть предыдущего
слагаемого

11. Порядок решения задачи

1.Выписать формулу общего слагаемого
2.Определить к какой группе относится сумма
3.Написать программу

12.

1 группа (1): каждое слагаемое вычисляется самостоятельно через
1
порядковый номер k: a k .
k
2 группа (3, 4): каждое последующее слагаемое вычисляется через
предыдущее (степень какого-либо числа или выражения и факториалы):
xk
x0
x1
x k 1
.
ak ; a0 1; a1 x; ak 1
k!
0!
1!
(k 1)!
Для определения сумм второй группы для получения следующего
слагаемого выписываются рекуррентные соотношения:

13.

14.

3 группа (2, 5, 6): слагаемое представляется в виде произведения двух
сомножителей. Один из сомножителей вычисляется самостоятельно, а второй –
через аналогичный сомножитель предыдущего слагаемого:
1
ak=bk ck; с k – самостоятельное выражение; bk – вычисляется через
k
рекуррентное соотношение.
1
(2): a k ( 1) ( k 1)
k
k
x
1
(5): a k x k
k
k
k
x
1
(6): a k ( 1) k 1 ( 1) k 1 x k
k
k
Решение:
k
x2 x3
x
(4): S 1 x .. . ( 1) k 2 ...
2! 3!
k!
ak=–ak-1 x/k; k=1, 2,...
a0=1
1 1 1
1
(2): S 1 ...( 1) k 1 ...
2 3 4
k

15.

16.

17.

#include <iostream>
#include <iomanip>
using namespace std;
void main()
{
int i,n;
double x,a,s,b;
cin >>x>>n;
s=1;
a=1;
for (i=1;i<n;i++)
{
a=-a*x*x/((2*i-1)*2*i);
s=s+a;
}
cout <<setprecision(5)<<fixed<<s<<endl;
}

18.

#include <iostream>
#include <iomanip>
using namespace std;
void main()
{
int i,n;
double x,a,s,b;
cin >>x>>n;
s=1; a=1;
for (i=1;i<n;i++)
{
b=2*I;
a=-a*x*x/((b-1)*b);
s=s+a;
}
cout <<setprecision(5)<<fixed<<s<<endl;
}

19.

#include <iostream>
#include <iomanip>
using namespace std;
void main()
{
int i,n;
double x,a,s,b;
cin >>x>>n;
s=1; a=1; b=0;
for (i=1;i<n;i++)
{
b+=2;
a=-a*x*x/((b-1)*b);
s=s+a;
}
cout <<setprecision(5)<<fixed<<s<<endl;
}

20.

#include <iostream>
#include <iomanip>
#include <math.h>
using namespace std;
void main()
{
int i,n;
double x,a,s,b, eps;
cin >>x>>eps;
s=0; a=1; i=1;
while (fabs(a)>eps)
{
s+=a;
i++
b=2*I;
a=-a*x*x/((b-1)*b);
}
cout <<setprecision(5)<<fixed<<s<<endl;
}

21.

#include <iostream>
#include <iomanip>
#include <math.h>
using namespace std;
void main()
{
int i,n;
double x,a,s,b, eps;
cin >>x>>eps;
s=0; a=1; i=1;
for (i=2;fabs(a)>eps;i++)
{
s+=a;
b=2*I;
a=-a*x*x/((b-1)*b);
}
cout <<setprecision(5)<<fixed<<s<<endl;
}

22.

23. Цикл с параметром



for (инициализация; выражение; модификации) оператор;
Инициализация – это действие, когда переменной присваиваем
начальное значение, т.е. значение с которого наш цикл начинает
работать. Можно инициализировать сразу несколько переменных. В этом
случае используется операция «запятая»
.

Выражение определяет условие продолжения цикла: если его
результат, приведенный к типу bool, равен true, цикл выполняется.

Модификация – это действие, которое осуществляется в процессе
работы цикла. В части модификаций тоже можно написать несколько
операторов через запятую.
Любая из частей может быть пропущена, но точки с запятой должны
стоять на своих местах.
Оператор является телом цикла, т.е. одно действие, но с помощью
цикла оно выполняется столько, сколько указано в цикле.
Соответственно, если мы хотим задать группу операторов, то они
помещаются в фигурные скобки.


23

24. Пример 1. Посчитать сумму чисел от 1 до n.

#include <stdio.h>
#include <iostream>
using namespace std;
void main()
{
int i,s=0,n;
cout <<"n=";
cin >>n;
for (i=1;i<=n;i++) s=s+i;
cout <<"s="<< s<<endl;
}
24

25. Пример 2. Другой вариант решения

#include <stdio.h>
#include <iostream>
using namespace std;
void main()
{
int n,i,s;
cout <<"n=";
cin >>n;
for (i=1,s=0; i<=n; i++) s += i;
cout<<"s="<<s;
}
или
i=s=0;
for (; i<n; s +=++i) ;
25

26. Взаимозаменяемость трех видов циклов

27. Взаимозаменяемость трех видов циклов

28. Текстовые файлы






Текстовыми называются файлы, состоящие из
любых символов.
Они организуются по строкам, каждая из которых
заканчивается символом «конец строки»
(символы с кодами 13 и 10).
Конец самого файла обозначается символом
«конец файла» (код 26).
При записи информации в текстовый файл все
данные преобразуются к символьному типу и
хранятся в символьном виде.
Текстовый файл можно создать и просмотреть с
помощью любого текстового редактора
28

29. Работа с текстовыми файлами в с С++ (потоковый)



Поток — это абстрактное понятие,
относящееся к любому переносу данных
от источника к приемнику.
В программах при работе с текстовыми
файлами необходимо подключать
библиотеки iostream и fstream.



#include <iostream>
#include <fstream>
using namespace std;
29

30. Текстовые файлы. Запись

Для того чтобы записывать данные в текстовый файл,
необходимо:
1) описать переменную типа ofstream:
ofstream Fout;
2) открыть файл с помощью функции open.
Fout.open(«file», mode);
Fout — переменная, описанная как ofstream,
file — полное имя файла на диске (ставитcя двойной
слеш вместо одинарного: D:\\sites\\accounts.txt ),
mode — режим работы с открываемым файлом.
3) вывести информацию в файл.
Fout<<a;
Fout<<b<<c<<d;
4) обязательно закрыть файл.
Fout.close();

30

31. Режимы работы с файлом






ios::in — открыть файл в режиме чтения данных;
режим является режимом по умолчанию для
потоков ifstream;
ios::out — открыть файл в режиме записи данных
(при этом информация о существующем файле
уничтожается); режим является режимом по
умолчанию для потоков ofstream;
ios::app — открыть файл в режиме записи данных
в конец файла;
ios::ate—Перейти к концу файла после
открытия .
ios::trunc — очистить файл, это же происходит в
режиме ios::out;
31

32. Пример записи в текстовый файл

#include <iostream>
#include <fstream>
using namespace std;
void main()
{
int a,b;
ofstream f;
f.open("a.txt",ios::out);
cin >>a>>b;
f<<a<<b;
f.close();
}
32

33. Текстовые файлы. Чтение

Для того чтобы прочитать данные из текстового файла,
необходимо:
1) описать переменную типа ifstream :
ifstream Finp;
2) открыть файл с помощью функции open.
Finp.open(«file», mode);
Finp — переменная, описанная как ifstream,
file — полное имя файла на диске,
mode — режим работы с открываемым файлом.
3) считать информацию из файла, при считывании каждой
порции данных необходимо проверять, достигнут ли конец
файла
Finp>>a;
4) закрыть файл.
Finp.close();

33

34. Пример чтения из файла

#include <iostream>
#include <fstream>
using namespace std;
void main()
{
int a,b;
ifstream f;
f.open("a.txt",ios::in);
f >>a>>b;
cout<<a<<b;
f.close();
}
34

35. Пример чтения из файла (конец файла)

#include <iostream>
#include <fstream>
using namespace std;
void main()
{
int a;
ifstream f;
f.open("a.txt",ios::in);
while(!f.eof())
{
f >>a;
cout<<a<<‘\t’;
}
f.close();
}
35

36. Задание


В текстовом файле input.txt находятся
целые числа. Подсчитать количество
отрицательных.
36

37. Решение

#include <iostream>
#include <fstream>
using namespace std;
void main()
{
int a, k=0;
ifstream f;
f.open("a.txt",ios::in);
while (!f.eof())
{
f >>a;
If (a<0) k++;
}
cout<<k;
f.close();
}
37

38. Задание


Найти все числа Фибоначчи, попадающие
в промежуток от a до b. Ответ записать в
файл c именем a.tst, располагая по
одному числу в строке. Если таких чисел
нет, то результирующий файл должен
быть создан, но пуст.
38

39. Решение

#include <iostream>
#include <fstream>
using namespace std;
void main()
{
int a,b,f1,f2,f3;
ofstream f;
cin>>a>>b;
f.open("a.tst",ios::out);
f1=1;f2=1;
while (f2<=b)
{
if (f2>=a && f2<=b) f<<f2<<"\n";
f3=f2+f1;
f1=f2;
f2=f3;
}
f.close();
}
39

40. Задание


Дан текстовый файл с именем a.txt, в
котором записано несколько натуральных
чисел. Посчитать среднее
арифметическое чисел, хранимых в
файле. Массивы использовать
запрещается, а файл для чтения
открывать только один раз.
40

41. Решение

#include <iostream>
#include <fstream>
using namespace std;
void main()
{
int n=0,s=0,a;
ifstream f;
f.open("a.txt",ios::in);
if (f)
{
while (!f.eof())
{
f>>a;
s+=a;
n++;
}
cout<<(double(s)/n);
}
else cout<< "Not file!";
f.close();
}
41

42. Пример 6. Вычислить сумму ряда S=1*2+2*4+3*8+4*16+…+n*2n

#include <iostream>
using namespace std;
void main()
{
int i,j,n,s;
cin >>n;
for (i=1,j=2,s=0;i<=n;i++,j=j*2)
s=s+i*j;
cout <<s;
}
42
English     Русский Правила