Лекции 1 семестр матанализ. лекции 1 семестр (1). Литература Герберт. Шилдт. С руководство для начинающих
Скачать 1.38 Mb.
|
Вычисление многочлена по схеме Горнера ////////////////////////////////////////// #include "stdafx.h" #include #include using namespace std; ///////////////// double Gorner(double* a, int n, double x) { double s = a[0]; int i; for (i = 1; i < n; i++) s = s * x + a[i]; return s; } /////////////////////////////////// void Create(ifstream& f, double* x, int n) { int i; for (i = 0; i < n; i++) f >> x[i]; } ////////////////////////////// void Show(ofstream& f, double* x, int n) { int i; for ( i = 0; i < n; i++) f << x[i] << ' ' ; f << endl; } ///////////////////////////////// int main() { ifstream in("in.txt"); ofstream out("out.txt"); if (!in) { cout << "Can't open file! " << endl; system("pause"); exit(-1); } int n, m; cout<<"Введите размерность коэффициентов n= " ; cin >> n; double* a = new double[n]; cout << "Введите размерность аргументов m= " ; cin >> m; double* x = new double[m]; double* y = new double[m]; Create(in, a, n); Create(in, x, m); out<<" Коэффициенты многочлена: "<< endl; Show(out, a, n); out << "Аргументы многочлена: "< Show(out, x, m); int i; for ( i = 0; i < n; i++) y[i] = Gorner(a, m, x[i]); out << "Значения многочлена: " << endl; Show(out, y, m); delete []a; delete []x; delete []y; in.close(); out.close(); system("pause"); return 0; } Входной файл in.txt 5 4 3 2 1 1 2 3 4 5 0.6 0.7 1 0 1 Выходной файл out.txt Коэффициенты многочлена: 5 4 3 2 1 Аргументы многочлена: 1 2 3 4 5 0.6 0.7 1 0 1 Значения многочлена: 15 129 547 1593 3711 4.792 6.4425 15 1 15 Лекция Форматирование Создать массив ( целый и вещественный ) в зависимости от флагов форматирования #include "stdafx.h" #include #include #include using namespace std; const int n=10; void create(ifstream&f, int x[n]); void create(ifstream&f, double x[n]); // перегрузка функции create void show(ofstream&f, int x[n], int k); void show(ofstream&f, double x[n], int k); // перегрузка функции show int main() { ifstream in1("in1.txt"); ifstream in2("in2.txt"); ofstream out1("out1.txt"); ofstream out2("out2.txt"); out1.setf( ios::left); //установить флаг форматирования out1.setf( ios::show pos) ; out1.setf( ios::oct); out1.unset( ios::oct); out1.setf( ios::right); out2.setf( ios::saentific); // saentific-плавающая точка; fixed-фиксированная точка out2.unset( ios:: saentific); //установка точности out2. precision(2); double b[n]; int a[n]; create (in1,a); in1.close(); show(out1,a); out1.close(); create (in2,b,20); in2.close(); show(out2,b,20); out2.close(); system("pause"); return 0; } ///////////////////////////////////// void create(ifstream&f, int x[n]) {int i; for (i=0;i f>>x[i]; } //////////////////////////////////// void create(ifstream&f, double x[n]) {int i; for (i=0;i f>>x[i]; } ////////////////////////////// void show(ifstream&f, int x[n], int k) { int i; for (i=0; i { f. width(k); f.fill(‘#’); f< } //////////////////////////////////// void show(ifstream&f, double x[n], int k) { int i; for (i=0; i { f. width(k); f.fill(‘#’); f< } //////////////////////////////// Файловый ввод-вывод. Задача 1 // Поиск минимального элемента в массиве. // Ввод массива из файла fstream.h // Вывод на экран iostream.h #include "stdafx.h" #include #include using namespace std; int main() { int i, min, mas[10]; ifstream myin("test.txt"); //Открытие файла для ввода. for(i=0;i<10;i++) myin >> mas[i]; min=mas[0]; for(i=1;i<10;i++) if (mas[i] min=mas[i]; cout << "min = " << min << '\n'; system("pause"); return 0; } Задача 2 // Приближенное вычисление 1/x // Последовательности {ак} и {вк} заданы рекуррентно: а0 =1, // в0=1-х; (0 // ак= ак-1(1+вк-1), вк=в2к-1, к=1,2,… // Вычислить аn для наименьшего n, при котором вn ≤ ∂ (∂>0). // Ввод значения переменной х с экрана iostream.h // Вывод всех членов последовательностей a и b, // а также результата в файл fstream.h #include "stdafx.h" #include #include using namespace std; const double eps= 0.001; int main() { double a=1, b, x; ofstream myout("result.txt"); //Открытие файла для вывода. cout << "Enter x:"; cin >> x; if (x<=0 || x>=2) cout << "not decision"; else { b=1-x; do { a=a*(1+b); b=b*b; myout << "a = " << a << " b = " << b << endl; } while(b>eps); myout << "1/x=" << a << endl; cout<<Проверка Вычислений "<< 1/x < } system("pause"); return 0; } Задача 3 // Запись вектора в обратном порядке // Файловый ввод-вывод fstream.h #include "stdafx.h" #include #include using namespace std; const int SIZE= 9; int main() { int i, k, mas[SIZE]; ifstream myin("test.txt"); //Открытие файла для ввода. ofstream myout("result.txt"); //Открытие файла для вывода. for(i=0;i myin >> mas[i]; for(i=0;i { k=mas[i]; mas[i]= mas[SIZE-i-1]; mas[SIZE-i-1] = k; } for(i=0;i myout << mas[i] << " "; cout< system("pause"); return 0; } Задача 4 // Транспонирование матрицы. // Файловый ввод-вывод fstream.h #include "stdafx.h" #include #include using namespace std; int main() { int i, j; const int n = 4; double b[n][n], x; ifstream myin("test.txt"); //Открытие файла для ввода. ofstream myout("result.txt"); //Открытие файла для вывода. for (i = 0; i < n; i++) for (j = 0; j < n; j++) myin >> b[i][j]; for (i = 0; i < n - 1; i++) for (j = i + 1; j < n; j++) { x = b[i][j]; b[i][j] = b[j][i]; b[j][i] = x; } myout << "Транспонированная матрица :”< for (i = 0; i < n; i++) { for (j = 0; j < n; j++) myout << b[i][j] << ' '; myout << endl; // Построчный вывод матрицы. } system("pause"); return 0; } Задача 5 /* Дан текст, состоящий из слов, разделенных пробелами. Выполнить форматирование текста, печатая в каждой строке не более SIZE символов. */ // Чтение производится в буфер (массив) по одному слову. // Длина каждого слова не должна превышать 29 символов. // Файловый ввод-вывод fstream.h #include "stdafx.h" #include #include #include using namespace std; const int SIZE =30; int main() { char buf[30]; int n, len=0; ifstream myin("text.txt"); ofstream myout("result.txt"); myin >> buf; while( !myin.eof() ) { n = strlen(buf); if (len+n <= SIZE) len=len+n+1; else { len=n+1; myout << '\n'; } myout << buf << ' '; myin >> buf; } system("pause"); return 0; } Задача 6 /* В упакованном представлении текста – цифра “К” означает К-кратное повторение следующей за ним буквы. Например, текст “3bc3a” интерпретируется как ”bbbcaaa”. Выполнить распаковку текста, считая, что символы символы- цифры рядом не встречаются. */ // Посимвольный ввод входного текста. // Длина слов не не ограничена. // Функция get() вводит очередной символ из входного потока // и возвращает его в качестве своего значения. // Функция put(f) вводит символ f в выходной поток. // Файловый ввод-вывод. #include "stdafx.h" #include #include using namespace std; int main() { char symb; int n, i; ifstream myin("text.txt"); ofstream myout("result.txt"); symb=myin.get(); while( !myin.eof() ) { if ( symb >='0' && symb <='9') { n = symb - '0'; symb=myin.get(); if (!myin.eof() ) for(i=1; i<=n; i++) myout.put(symb); } else myout.put(symb); // Вывод символа в файл. symb=myin.get(); } system("pause"); return 0; } Задача 7 /* Дан текст, состоящий из слов, разделенных пробелами. В каждой строке текста первое и последнее слово поменять местами. */ #include "stdafx.h" #include #include #include using namespace std; int main() { const size=81; // Длина строки не более 80 символов. char buf[size]; int n, i; int first; // Позиция начала первого слова строки int count_first; // Кол-во символов первого слова int last; // Позиция окончания последнего слова int count_last; // Кол-во символов последнего слова ifstream myin("text.txt"); // Открытие файла для ввода ofstream myout("result.txt"); // Открытие файла для вывода while( !myin.eof() ) { // Чтение строки в буфер myin.getline(buf, size, '\n'); n=strlen(buf); // n – кол-во символов в buf (без ‘\0’) // Вывод начальных пробелов строки for(i=0; i<=n; i++) if(buf[i]==' ') myout.put(buf[i]); else break; if(buf[i]=='\0') // Если пустая строка { myout.put('\n'); continue; // Переход к следующей итерации цикла } first=i; // Позиция начала первого слова строки count_first=1; // Подсчет кол-ва символов в первом слове for(i=first+1; i if(buf[i]!=' ' && buf[i]!='\0') count_first++; else break; // Пропуск пробелов в конце строки for(i=n-1; i>=0 && buf[i]==' '; i--); last=i; // Позиция окончания последнего слова строки count_last=0; // Подсчет кол-ва символов в последнем слове for(i=last; i>=0; i--) if(buf[i]!=' ') count_last++; else break; // Если в строке только одно слово if(first+count_first > last-count_last) myout << buf << '\n'; // Вывод всей строки без изменений else { // Вывод последнего слова for(i=last-count_last+1; i<=last; i++) myout.put(buf[i]); // Вывод “середины” строки for(i=first+count_first; i<=last-count_last; i++) myout.put(buf[i]); // Вывод первого слова for(i=first; i myout.put(buf[i]); myout << '\n'; } } system("pause"); return 0; } Задача 8 // Подсчет количества строк, слов и символов в тексте #include "stdafx.h" #include #include using namespace std; const int SIZE=512; int main() { int nl=0; // Кол-во строк int nw=0; // Кол-во слов int nc=0; // Кол-во символов int n,i; char buf[SIZE]; // Размерность физического блока на диске bool inword=false; // Находимся в слове ifstream myin("text.txt"); while( !myin.eof() ) { myin.read(buf, SIZE); // Чтение в буфер n=myin.gcount(); nc+=n; for(i=0; i { if(buf[i]=='\n') ++nl; if(buf[i]=='\n' || buf[i]==' ') inword=false; else if (!inword) { inword=true; ++nw; } } } cout<<"Lines= "< cout<<"Words= "< cout<<"Symbols= "< system("pause"); return 0; } Задача #include "stdafx.h" #include #include using namespace std; int main() { int a=904; double b=905.906901; cout< cout< cout< cout< cout< return 0; } Лекция Файловый ввод и вывод (продолжение) на примере печати таблицы «Успеваемость на факультете ВМК» //arb2009_table_file_VMK #include "stdafx.h" #include #include #include #include using namespace std; const int numberCourse=5; const int numberMark=4; const int lengthIndent=7;// длина абзаца const int lengthTable=56;// длина таблицы const int lengthColumn=10;// длина колонки ///////////////////////////////////////////////// void star(ofstream &f,int n,int m) { f.width(n); int i; for (i=0;i f<<'*'; f< } /////////////////////////////////////////////// void star1(ofstream &f,int n) { int i; f.width(n); f<<"*"; f.width(lengthColumn+1); f<<"*"; for (i=0;i { f.width(lengthColumn+1); f<<'*'; } f< } /////////////////////////////////////////////////////////////// int main() { char name_Course[numberCourse][15]; char name_Mark[numberMark][20]; int number_Student[numberCourse][numberMark]; char name_Faculty[80]; int Total[numberMark]; ifstream in("arb.txt"); ofstream out("vmk.txt"); int i,j; in.getline(name_Faculty,80); for (i=0;i in>>name_Course[i]; for (i=0;i in>> name_Mark[i]; for (i=0;i for (j=0;j in>> number_Student[i][j]; in.close(); out< out.width( lengthTable + 4 ); out< out< star1(out,lengthIndent+1); out.width(lengthIndent+1); out<<"*"; out.width(lengthColumn+1); out<<"*"; for(i=0;i { out<<" "< out.width(lengthColumn-strlen(name_Mark[i])); out<<"*"; } out< star(out,lengthIndent+1,lengthTable); for(i=0;i { star1(out,lengthIndent+1); out.width(lengthIndent+1); out<<"*"; out<<" "< out.width(lengthColumn-strlen(name_Course[i])); out<<"*"; for(j=0;j { out< out< out<<"*"; } out< star1(out,lengthIndent+1); star(out,lengthIndent+1,lengthTable); } for(j=0;j { Total[j]=0; for(i=0;i Total[j]+=number_Student[i][j]; } star(out,lengthIndent+1,lengthTable); star1(out,lengthIndent+1); out.width(lengthIndent+1); out<<"*"<<" Total *"; for(j=0;j { out< out< out<<"*"; } out< star1(out,lengthIndent+1); star(out,lengthIndent+1,lengthTable); out< system("pause"); return 0; } |