Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Скачиваний:
8
Добавлен:
01.04.2014
Размер:
136.85 Кб
Скачать

Int main(){

double a, b, h, x, res, s, y;

int n, k, zn=-1;

// Ввод исходных данных

cout << "Vvedite a b h n: " << endl;

cin >> a >> b >> h >> n;

// Вычисление суммы

for (x=a; x<=b; x+=h){

res = s = x;

for (k=1; k<=n; k++){

s *= zn * pow(x,2) / ((2*k+1)*2*k);

res += s;

}

y = sin(x);

cout << res << " \tY(x) = sin(" << x << ") = " << y;

cout << "\t|Y(x) - S(x)| = " << fabs(y-res) << endl;

}

// Вывод результата

cout << "Press any key..." << endl;

getch();

return 0;

}

Результат выполнения программы.

Задание №4

В одномерном целочисленном массиве (размер массива (не более 20) и значения его элементов вводить с клавиатуры) вычислить произведение элементов массива, расположенных между максимальным и минимальным элементами.

Листинг 4.1

#include <iostream.h>

#include <conio.h>

Int main(){

typedef int mas[20]; // определение типа массив

mas a; // определение массива А

unsigned short int iMaxA, iMinA, n, p, i, k, min, max;

cout << "Input n(<=20):\t";

cin >> n;

cout << "\nArray a:" << endl;

for (i=0; i<n; i++){

cout << "\nInput value of a[" << i+1 << "]:\t";

cin >> a[i];

}

min = max = 0;

p = 1;

for (i=0; i<n; i++){

for (k=1; k<n-1; k++){

iMaxA = (a[i] > a[k]) ? i : k;

iMinA = (a[i] < a[k]) ? i : k;

}

if (a[iMaxA] > a[max]) max = iMaxA; // были ли уже числа больше

if (a[iMinA] < a[min]) min = iMinA; // были ли уже числа меньше

}

cout << "\nMax value of array \"a\" is:\t" << a[max] << endl;

cout << "Min value of array \"a\" is:\t" << a[min] << endl;

while(max != min){

if (max > min){ // максимальный элемент расположен после минимального

p *= a[max];

max--;

}

else { // максимальный элемент перед минимальным

p *= a[max];

max++;

}

}

p *= a[min];

cout << "\nProizvedenie = " << p << endl;

cout << "\n\nPress any key to exit" << endl;

getch();

return 0;

}

Результат выполнения программы.

Задание №5

В двухмерном целочисленном массиве (размеры массива N, M и значения его элементов вводить с клавиатуры) найти указанное значение.

Массив в памяти разместить динамически (с использованием операций new и delete), ввод исходных данных и вывод полученных результатов выполнить в основной функции, а решение задачи оформить в виде отдельной функции пользователя. Не использовать глобальных переменных.

Найти сумму элементов, расположенных на главной диагонали.

Т.к. нужно определить сумму элементов, расположенных на главной диагонали, то матрица является квадратной, поэтому M=N.

Листинг 5.1. Функция main

#include <iostream.h>

#include <conio.h>

int summ_main_diag(int n, int **a);

Int main(){

int **a, i, j, n, m, summ;

cout << "Input N (M=N):\t";

cin >> n;

// Значение M=N, т.к. матрица квадратная

m = n;

a = new int *[n];

for (i=0; i<n; i++)

a[i] = new int [m];

cout << "\nInput A" << endl;

for (i=0; i<n; i++)

for (j=0; j<m; j++){

cout << "a[" << i+1 << "][" << j+1 << "] = ";

cin >> a[i][j];

}

cout << "\nMatrix A:" << endl;

for (i=0; i<n; i++){

for (j=0; j<m; j++)

cout << "\t" << a[i][j];

cout << endl;

}

summ = summ_main_diag(n, a);

cout << "Summa zna4eniy glavnoj diagonali = " << summ << endl;

delete []a;

cout << "\nPress any key to exit..." << endl;

getch();

return 0;

}

Листинг 5.2. Функция summ_main_diag

int summ_main_diag(int n, int **a){

int i, s=0;

for (i=0; i<n; i++)

s += a[i][i];

return s;

}

Результат выполнения программы.

Задание №6

Написать программу обработки файла типа запись, содержащую следующие пункты меню: «Создание», «Просмотр», «Коррекция» (добавление новых данных или редактирование старых), «Решение индивидуального задания».

Каждая запись должна содержать следующую информацию о студентах:

- фамилия и инициалы;

- год рождения;

- номер группы;

- оценки за семестр: по физике, математике, информатике, химии;

- средний балл.

Организовать ввод исходных данных, средний балл рассчитать по введенным оценкам.

Содержимое всего файла и результаты решения индивидуального задания записать в текстовый файл.

Распечатать анкетные данные студентов, сдавших сессию на 8, 9 и 10.

Листинг 6.1

#include <io.h>

#include <stdio.h>

#include <conio.h>

struct Students{

char FIO[30];

int year_birthday;

int num_group;

int balls[4];

double s_ball;

};

Students student;

FILE *Fs, *Ft; // файл структуры и текстовый соответственно

char fs_name[] = "students.dat";

char ft_name[] = "result.txt";

int size = sizeof(Students);

// прототипы функций

void create();

void add();

bool view();

void out(Students, int);

void edit(int);

void save(Students *, int);

void zadanie();

void main(){

int kod, kod_edit, edit_number;

Ft = fopen(ft_name, "w");

while(1){

puts("\n1 - Create\t2 - View\t3 - Edit\t4 - Zadanie\t0 - Exit\n");

puts("Input the code here: ");

scanf("%d", &kod);

switch(kod){

case 0:

fclose(Ft);

return;

case 1: // Create File

create();

if(!Fs){

puts("\nCreate Error!");

return;

}

break;

case 2: // View

if (!view()){

puts("\n\nError View!\n");

return;

}

break;

case 3: // Edit

puts("\n1 - Add\t2 - Edit\n");

scanf("%d", &kod_edit);

switch(kod_edit){

case 1: // Add new record

add();

puts("Add a new line");

break;

case 2:

// Edit record

view();

printf("\n\nVvedite nomer izmenyaemoj zapisi:\t");

scanf("%d", &edit_number);

edit(edit_number);

///////

break;

}

break;

case 4:

zadanie();

break;

}

}

getch();

}

/*

* Функция для создания нового пустого файла структуры

*/

void create(){

Fs = fopen(fs_name, "wb");

puts("\nFile Created!\n");

}

/*

* Функция для добавления новой записи в структуру

*/

void add(){

double fiz, mat, inf, khi, sball;

Fs = fopen(fs_name, "ab");

printf("\nFIO - ");

fflush(stdin);

gets(student.FIO);

printf("\nBirthday Year, Number Group - ");

scanf("%d %d", &student.year_birthday, &student.num_group);

printf("\nInput Balls: fizik, matem, informatic, khimya - ");

scanf("%d %d %d %d", &student.balls[0], &student.balls[1],

&student.balls[2], &student.balls[3]);

fiz = student.balls[0];

mat = student.balls[1];

inf = student.balls[2];

khi = student.balls[3];

sball = (fiz + mat + inf + khi) / 4;

printf("%6.2lf", sball);

student.s_ball = sball;

fwrite(&student, size, 1, Fs);

fclose(Fs);

}

/*

* Отобржажение файла структуры на дисплее

*/

bool view(){

int i = 1;

Fs = fopen(fs_name, "rb");

if (!Fs)

return false;

printf("\n\t--------------- Informations ---------------\n");

fprintf(Ft, "\n\n\n\t--------------- Informations ---------------\n");

while(1){

if(!fread(&student, size, 1, Fs)) break;

out(student, i);

i++;

}

puts("\n\n\n");

fclose(Fs);

return true;

}

/*

* Отображение одной записи на дисплее

* Вх. параметры:

* - s типа структуры Students

* - i - для отображения порядкового номера (счётчик) ->

* ->исп. для вывода номера записи, в файл не записывается

*/

void out(Students s, int i=0){

printf("\n%d. %s - %d, group: %d; Fizik: %d, Matem: %d, Informatic: %d, Khimiya: %d, Sredni ball: %1.2lf", i, s.FIO, s.year_birthday, s.num_group, s.balls[0], s.balls[1], s.balls[2], s.balls[3], s.s_ball);

fprintf(Ft, "\n%s - %d, group: %d; Fizik: %d, Matem: %d, Informatic: %d, Khimiya: %d, Sredni ball: %1.2lf", s.FIO, s.year_birthday, s.num_group, s.balls[0], s.balls[1], s.balls[2], s.balls[3], s.s_ball);

}

void edit(int edit_number){

Students *st, newStudent;

int descriptor, i, kol;

long len;

printf("\nEdit student:\nFIO - ");

fflush(stdin);

gets(newStudent.FIO);

printf("\nBirthday Year, Number Group - ");

scanf("%d %d", &newStudent.year_birthday, &newStudent.num_group);

printf("\nInput Balls: fizik, matem, informatic, khimya - ");

scanf("%d %d %d %d", &newStudent.balls[0], &newStudent.balls[1], &newStudent.balls[2], &newStudent.balls[3]);

newStudent.s_ball = (newStudent.balls[0]+newStudent.balls[1] + newStudent.balls[2] + newStudent.balls[3]) / 4;

Fs = fopen(fs_name, "rb");

descriptor = fileno(Fs);

len = filelength(descriptor);

kol = len/size;

st = new Students[kol]; // 138

for (i=0; i<kol; i++){

fread((st+i), size, 1, Fs);

}

fclose(Fs);

st[edit_number-1] = newStudent;

for (i=0; i<kol; i++)

out(st[i], i+1);

save(st, kol);

delete []st;

}

void save(Students *st, int num){

int i;

Fs = fopen(fs_name, "wb");

for (i=0; i<num; i++)

fwrite(&st[i], size, 1, Fs);

fclose(Fs);

}

/**

* Выполнение индивидуального задания

* 1 Вариант:

* - Распечатать анкетные данные студентов, сдавших ->

* ->сессию на 8, 9 и 10.

*/

void zadanie(){

Students *st;

int descriptor, i, j=0, kol;

long len;

printf("\n ------- Studenti sdavwie sesiyu na 8, 9, 10 ------- ");

fprintf(Ft, "\n ------- Studenti sdavwie sesiyu na 8, 9, 10 ------- ");

Fs = fopen(fs_name, "rb");

descriptor = fileno(Fs);

len = filelength(descriptor);

kol = len/size;

st = new Students[kol];

for (i=0; i<kol; i++){

fread((st+i), size, 1, Fs);

}

fclose(Fs);

for (i=0; i<kol; i++){

if (st[i].balls[0]>=8 && st[i].balls[1]>=8 && st[i].balls[2]>=8 && st[i].balls[3]>=8)

out(st[i],0);

}

delete []st;

}

Результат выполнения программы.

20

Соседние файлы в папке отчёты