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

Архив1 / docx58 / Отчет(6)

.docx
Скачиваний:
18
Добавлен:
01.08.2013
Размер:
25.48 Кб
Скачать

Саратовский Государственный Университет

Отчет по информатике(практика)

Подготовила:

Студентка 222 группы

Ловкова Татьяна

Проверила:

Доцент кафедры ИиП факультета КНиИТ

Огнёва М. В.

Саратов 2012

|.4. В файле input.txt содержатся данные о группе студентов в формате:

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

запись о каждом студенте группы содержит следующие сведения: фамилия, имя, отчество, год рождения, оценки по пяти предметам.

Переписать данные файла input.txt в файл output.txt, отсортировав их по убыванию суммы оценок методом «пузырька»(сумму оценок вывести в файл output.txt для каждого студента);

#include "fstream"

#include "string"

#include "iostream"

#include "iomanip"

using namespace std;

ifstream in("input.txt");

ofstream out("output.txt");

struct mas //объявляем структуру mas

{

string fam,name,secondname;//вводим переменные

int year, ses[5];

double key;//средняя оценка

void print();//объявляем функцию print

};

void mas::print()//рассматриваем структура mas из области видимости функции print

{

out<<setw(12)<<left<<fam<<setw(10)<<name<<setw(15)<<secondname;

out<<setw(5)<<year;

for(int i=0;i<5;i++)//цикл для оценок

out<<setw(5)<<ses[i];

out<<setw(5)<<key<<endl;

}

void sort(mas*a,int n)//сортировка массива записей методом "пузырька"

{ mas temp;//рабочая переменная, которая используется для перестановки местами 2-х элементов массива

int i,j;//ключевое поле

for(i=0;i<n-1;i++)//i -счетчик

for(j=n-1;j>i;j--)//j- индекс элементов

if(a[j].key>a[j-1].key){temp=a[j]; a[j]=a[j-1]; a[j-1]=temp;}

}

int main()

{

int n=0,m,i;

mas stud[20];

if(!in) cout<<"Ошибка при открытии файла input.txt\n";

else

{

in>>m;//считываем номер группы

while(in.peek()!=EOF)//считываем данные про всех студентов

{

cout<<"n="<<n<<endl;

in>>stud[n].fam;

cout<<stud[n].fam<<endl;

in>>stud[n].name;

cout<<stud[n].name<<endl;

in>>stud[n].secondname;

cout<<stud[n].secondname<<endl;

in>>stud[n].year;

cout<<stud[n].year<<endl;

//считываем оценки и высчитываем сумму

stud[n].key=0;

for(i=0;i<5;i++)// для все элементов с 0 по 4

{

in>>stud[n].ses[i];//помещаем в поток оценки

cout<<stud[n].ses[i]<<endl;

stud[n].key+=stud[n].ses[i];//накапливаем сумму

}

cout<<stud[n].key<<endl;//выводим на экран сумму

n++;//переключаем счетчик на 1

}

sort(stud,n);//сортируем массив записей

//выводим отсортированные данные в файл output.txt

out<<m<<endl;

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

stud[i].print();

}

in.close();out.close();//закрываем файлы

return 0;

}

Пример работы программы:

222

Иванов И.И. 1993 5 3 4 3 5

Петров Р. С. 1992 2 3 5 5 1

Каймашников В. С. 1994 3 5 4 4 5

Гудзенко А. С. 1993 3 4 2 5 5

Кириченко Е. Ю. 1992 5 4 4 2 3

222

Каймашников В. С. 1994 3 5 4 4 5 21

Иванов И. И. 1993 5 3 4 3 5 20

Гудзенко А. С. 1993 3 4 2 5 5 19

Кириченко Е.Ю. 1992 5 4 4 2 3 18

Петров Р. С. 1992 2 3 5 5 1 16

||. 4. Дана матрица размерностью nxn, содержащая целые числа. Отсортировать каждый столбец матрицы по возрастанию элементов методом выбора.

#include "fstream"

#include "iostream"

#include "iomanip"

using namespace std;

ifstream in("input1.txt");

ofstream out("output1.txt");

void sort(int *a,int n)

{int temp;

int lowindex,lowkey,i,j;

for(int i=0;i<n-1;i++)

{

lowindex=i;

lowkey=a[i];

for (j=i+1;j<n;j++)

if(a[j]<lowkey)

{

lowkey=a[j];

lowindex=j;

}

temp=a[i];

a[i]=a[lowindex];

a[lowindex]=temp;

}

}

int main()

{

int n,m,i,j;

int a[10][10];

in>>n>>m;

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

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

in>>a[i][j];

int b[10];

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

{

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

b[i]=a[i][j];

sort(b,n);

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

a[i][j]=b[i];

}

out<<n<<'\t'<<m<<'\n';

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

{

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

out<<setw(5)<<a[i][j];

out<<'\n';

}

in.close(); out.close();

return 0;

}

Примеры работы программы:

4 5

23 54 65 -9 0

8 96 -4 -7 6

100 12 90 1 2

2 -1 4 -5 -12

4 5

2 -1 -4 -9 -12

8 12 4 -7 0

23 54 65 -5 2

100 96 90 1 6

Классы: 2. Реализовать класс Money для работы с денежными суммами. Объекты класс определяются парой чисел(рубли, копейки). Реализовать методы сложения, вычитания, деления сумм, сравнение двух сумм, умножение и деление на число.

#include <iostream>

#include <algorithm>

#include <string>

using namespace std;

class money {//объявляем класс money

private://закрытые поля или члены данные rub и kop

int rub, kop;

public://открытые члены функции

money() {rub = 0; kop = 0;}//конструктор

void perev () {//функция, которая считает рубли и копейки

rub += kop / 100;

kop %= 100;

}

void read() {//функция считывает значения рублей и копеек

cout << "rubli = ";

cin >> rub;

cout << "kopeiki = ";

cin >> kop;

perev();

}

void print () {// выводит на экран

cout << rub << "r." ;

cout << kop << "k.";

}

money sum (money b) {// объявляем метод sum с параметром b типа money

money ans;// объявляем переменную ans

ans.rub = rub + b.rub;// поле, указывающее на значение rub= значение rub - поле, указывающее на значение rub

ans.kop = kop + b.kop;

ans.perev();

return ans;

}

money raz (money b) {// метод raz

money ans;

if (kop < b.kop) {

--rub;

kop += 100;

}

ans.rub = rub - b.rub;//поле. указывающее на значение руб=знач руб - поле ук на зн руб

ans.kop = kop - b.kop;

ans.perev();//возвращ полученное значение

return ans;

}

double del (money b) {

double x = rub + kop / 100;

double y = b.rub + b.kop / 100;

double ans = x / y;

return ans;

}

bool srav (money b) {

if (rub > b.rub)

return true;

else

if (rub == b.rub)

if (kop > b.kop)

return true;

else return false;

else return false;

}

void proz_scal (int x) {

rub *= x;

kop *= x;

perev();

return;

}

void del_sc (int x) {

rub /= x;

kop /= x;

perev();

return;

}

};

int main () {

money sum, raz;

bool flag;

double del;

int del_sc, proz_sc;

money a, b;

cout << "Vvedite a:" << endl;

a.read();

cout << endl;

cout << "Vvedite b:" << endl;

b.read();

cout << endl;

a.print();

cout<<"+ ";

b.print();

cout<< "= ";

a.sum(b).print();

cout << endl;

cout << endl;

a.print();

cout<<"- ";

b.print();

cout<< "= ";

a.raz(b).print();

cout << endl;

cout << endl;

del = a.del(b);

cout << "a / b:" << endl << del << endl;

cout << "Vvedite na chto razdelit a:" << endl << "del_sc = ";

cin >> del_sc;

a.del_sc(del_sc);

cout << endl;

cout << endl;

cout << "Posle delenia a / del_sc , a teper:" << endl;

a.print();

cout << endl;

cout << endl;

cout << "Vvedite na chto umnozit a:" << endl << "proz_sc = ";

cin >> proz_sc;

a.proz_scal(proz_sc);

cout << endl;

cout << endl;

cout << "Posle umnozenia a * proz_sc , a teper:" << endl;;

a.print();

cout << endl;

cout << endl;

flag = a.srav(b);

if (flag == true)

cout << "a > b";

else cout << "a < b";

cout << endl;

return 0;

}

Примеры работы программы:

Введите а

Рубли = 32

Копейки = 45

Введите b

Рубли = 65

Копейки = 32

32р. 45к. + 65р. 32к. = 97р. 77к.

32р. 45к. - 65р. 32к. = -33р. 13к.

a/b

0.492308

Введите на что разделить а

N=3

После деления а = 10р. 15к.

Введите на что умножить а

N=2

После умножения а = 20р. 30к.

2. Создать список из целых чисел. Подсчитать сумму положительных элементов. Создать из положительных элементов новый список.

1 вариант: стек

#include "stdio.h"

#include <cstdlib>

#include <iostream>

using namespace std;

struct elem {

int val;//значение переменной которую мы заносим в стек

elem *next;//указатель на следующий елемент

};

class stack {// закрытые члены денные

elem *top;//указатель на верхний элемент

public://откр члены функции

stack() {//конструктор

top = NULL;

}

void push(int x) {//функция, которая добавляет элемент

elem *e = new elem;

e->val = x;

e->next = top;

top = e;

}

int peek() {//просмотр списка на пустоту

if (top != NULL)

return top->val;

else {

cout << "Stack is empty" << endl;

return 0;

}

}

int pop() {//

if (top == NULL) {//если стек пустой

cout << "Stack is empty" << endl;

return 0;

}

elem *e = top;// указ е устанавливаем туда куда и top, т. е. на 1 -й элемент

int val = e->val;// запоминаем значение из элемента на который указывает е

top = e->next;//top устан на след элемент за элементом на который указывает е

delete e;//очищ память на которую указывает е

return val;

}

};

void main() {

stack a;

int n;

cin >> n;

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

int z;

cin >> z;

a.push(z);

}

stack s;

int sum = 0;

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

if (a.peek()>0){

sum += a.peek();

s.push(a.peek());

}

a.pop();

}

cout << sum;

}

Примеры работы программы:

Введите количество чисел

N=8

3

-5

8

2

=9

-3

2

5

Сумма положительных чисел = 20

2 вариант: очередь

#include "stdio.h"

#include <cstdlib>

#include <iostream>

using namespace std;

class queue//объявляется класс очередь

{

private://закрытые члены данные

struct telem

{

int inf;//значение переменной которую мы заносим в очередь

telem *next;// переменная которая указывает на следующий элемент

};

telem *head, *tail;//поля класса указатели на конец и начало очереди

public:// открытые поял класса

queue()

{

head=tail=NULL;//конструктор который делает очередь пустой, присваивает NULL всем указателям

}

int peek() {//функция просматривает первый элемент в очереди

if (head != NULL)// если указатель на первый элемент не указывает ни на что то он равен NULL и значит очередь пуста

return head->inf;

else {

cout << "Queue is empty" << endl;

return 0;

}

}

void push(int x)//функция кладет элемент х в очередь

{

telem *e = new telem;//освобождается память под новый элемент

e->inf = x;// в информационное поле e->inf записывается значение х

if(head == NULL){// если начало пустое

head = e;//начало становится е

tail = e;// конец становится е

return;

}

tail->next = e;// значение поля tail->next присваивается значение е

tail = e;// конец становится е

}

int pop() {//функция, которая удаляет и возвращает первый элемент очереди

if (head == NULL) {//если стек пустой

cout << "Queue is empty" << endl;

return 0;

}

telem *e = head;// указ е устанавливаем туда куда и top, т. е. на 1 -й элемент

int val = e->inf;// запоминаем значение из элемент на кот указывает е

head = e->next;//top устанавливаем на следующий элемент за элементом на который указывает е

delete e;//очищаем память на которую указывает е

return val;

}

};

void main() {

queue a;//новая очередь а

int n;

cin >> n;

for(int i=0;i<n; i++){//цикл для всех чисел

int z;

cin >> z;

a.push(z);// помещаем число в очередь

}

queue s;// переменная типа очередь

int sum = 0;

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

if (a.peek()>0){

sum += a.peek();

s.push(a.peek());

}

a.pop();

}

cout << sum;

}

Введите примеры работы программы

Введите количество чисел

N=5

3

-2

6

-4

5

Сумма положительных чисел =14

3. Односвязный список

Соседние файлы в папке docx58