Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
16_II / список 30 задач.docx
Скачиваний:
23
Добавлен:
10.02.2015
Размер:
36.58 Кб
Скачать

Казанский Государственный Университет им. В.И. Ульянова-Ленина

Факультет вычислительной математики и кибернетики

Семестровый отчет

по программированию

Выполнила:

студентка группы 981п 2

Валиева А.Ф.

Проверил:

Ахтямов Р.Б.

г. Казань, 2009 год

Содержание

1. Найти минимум в списке.

2. В списке минимум и максимум поменять местами. 3. В списке после первого вхождения  х поставить у. 4. Удалить элемент списка.

5. Проверить на упорядоченность список.

6. Удалить повтор в списке. 7. Адрес предыдущего элемента списка. 8. В списке проверить условие: t=true если ai<0 и аi+1>0; false в противном случ. 9. Является ли данный список рядом Фибаначи.

10. В списке х и у поменять местами. 11. Адрес элемента списка. 12. Сумма элементов списка. 13. Найти кол-во максимума в списке. Список читается из файла. 14. Длина списка.

15. Все ли элементы списка простые цифры. 16. Количество перемен знаков в списке.

17. Упорядочить список. Список читается из файла.

18. Из двух упорядоченных списков сделать один.

19. Произведение всех отрицательных чисел списка.

20. Количество вхождений х в список. 21. Создать и показать полином.

22. Полином привести к подобным членам. 23. Сумма полиномов.

24. Умножение полиномов. 25. Ввод и показ дерево. 26. Опорные точки графа.

27. Проверка входного текста методом конечных состояний.

28. Стековый алгоритм. Проверка формулы.

29. Метод конечных состояний. Является ли последовательность символов целым или вещественным числом.

30. Моделирование машины Тьюринга.

Проверка входного текста методом конечных состояний.

#include <iostream.h>

#include <fstream.h>

void main ()

{

ifstream f("push.txt");

bool r;

char x;

int q=-2;

r=true;

while (!f.eof()&&r&&(q!=10))

{

f>>x;

switch (q)

{

case -2: if (x=='?') q=-1; else r=false; break;

case -1: if (x=='e') q=0; else r=false; break;

case 0: if (x=='(') q=1; else r=false; break;

case 1: if (x=='c') q=2; else r=false; break;

case 2:

switch (x)

{

case ':': q=6; break;

case '.': q=3; break;

case ',': q=1; break;

default: r=false; break;

}

break;

case 3: if (x=='.') q=4; else r=false; break;

case 4: if (x=='c') q=5; else r=false; break;

case 5:

switch (x) {

case ':': q=6; break;

case '.': q=1; break;

default: r=false; break;

}

break;

case 6: if (x=='s') q=7; else r=false; break;

case 7:

switch (x)

{

case ')': q=10; break;

case ';': q=1; break;

case '/': q=8; break;

default: r=false; break;

}

break;

case 8:if (x=='s') q=9; else r=false; break;

case 9:if (x==')') q=10; else r=false; break;

default: r=false; break;}}

if (q==10) cout<<"text pravilnii"<<endl;

else cout<<"text error"<<endl;}

Стековый алгоритм. Проверка формулы.

#include<iostream.h>

#include<fstream.h>

struct sp{char data;sp *next;};

ifstream in ("in.txt");

void VSTEK (sp*&nach1,char x)

{

sp *r;

r=new sp;

r->data=x;

r->next=nach1;

nach1=r;

}

void IZSTEK(sp *&nach1,char &x)

{

sp* r;

x=nach1->data;

r=nach1->next;

delete nach1;

nach1=r;

}

Void main()

{

sp *nach;

char c,op,x,y;

in.seekg(0);

nach=NULL;

while(in.peek()!=EOF){

in>>c;

if(((c<='9')&&(c>='0'))||(c=='M')||(c=='m'))

VSTEK(nach,c);

else if(c==')'){

IZSTEK(nach,y);

IZSTEK(nach,x);

IZSTEK(nach,op);

switch(op){

case 'M':

if(x>y)

c=x;

else c=y;

break;

case'm':

if(x<=y)

c=x;

else c=y;

break;

default:;

}

Vstek(nach,c);

}}

in.close();

cout<<"formula=";

IZSTEK(nach,c);

cout<<c;

cout<<endl;}

Метод конечных состояний. Является ли последовательность символов целым или вещественным числом.

#include<iostream.h>

#include<string.h>

Void main(){

char a[80];

int s,i,n;

cout<<"enter strok"<<endl;

cin>>a;

n=strlen(a);

s=0;

for(i=0; ((i<n) &&(s!=5)); i++)

switch(s){

case 0:

switch (a[i]){

case '+':s=1;break;

case '-':s=1;break;

case '0':s=2;break;

case '1':s=2;break;

case '2':s=2;break;

case '3':s=2;break;

case '4':s=2;break;

case '5':s=2;break;

case '6':s=2;break;

case '7':s=2;break;

case '8':s=2;break;

case '9':s=2;break;

default:s=5; break;}

break;

case 1:

switch (a[i]){

case '0':s=2;break;

case '1':s=2;break;

case '2':s=2;break;

case '3':s=2;break;

case '4':s=2;break;

case '5':s=2;break;

case '6':s=2;break;

case '7':s=2;break;

case '8':s=2;break;

case '9':s=2;break;

default:s=5;break;}break;

case 2:

switch (a[i]){

case '0':s=3;break;

case '1':s=3;break;

case '2':s=3;break;

case '3':s=3;break;

case '4':s=3;break;

case '5':s=3;break;

case '6':s=3;break;

case '7':s=3;break;

case '8':s=3;break;

case '9':s=3;break;

default:s=5;break;}break;

case 3:

switch (a[i]){

case '0':s=3;break;

case '1':s=3;break;

case '2':s=3;break;

case '3':s=3;break;

case '4':s=3;break;

case '5':s=3;break;

case '6':s=3;break;

case '7':s=3;break;

case '8':s=3;break;

case '9':s=3;break;

default:s=5;break;}break;

}

switch (s){

case 2:cout<<"integer"<<endl;

break;

case 3:cout<<"real"<<endl;

break;

default:cout<<"error"<<endl;

break;}}

Упорядочить список. Список читается из файла.

#include <iostream.h>

#include <fstream.h>

struct sp

{

int data;

sp *next;

};

void pokaz_sp(sp *nach)

{

sp *p;

p=nach;

while (p!=NULL)

{

cout<<p->data<<" ";

p=p->next;

}

}

Void main ()

{

sp *p, *prev, *nach, *q;

int x;

ifstream f ("input1.txt");

nach=NULL;

f>>x;

p=new sp;

p->data=x;

p->next=nach;

nach=p;

while (f.peek()!=EOF)

{

f>>x;

q=new sp;

p=nach;

do

{

if (p->data>x)

{

q->next=p->next;

p->next=q;

q->data=p->data;

p->data=x;

break;

}

prev=p;

p=p->next;

}

while (p!=NULL);

if (p==NULL){

q=new sp;

q->data=x;

prev->next=q;

q->next=NULL;

}}

f.close();

pokaz_sp(nach);}

Моделирование машины Тьюринга.

#include<iostream.h>

int main(int argc, char* argv[])

{

const int n = 100, m = 4, s = 5;

char a[n], b[n];

enum sst {q1, q2, q3, q0};

enum direc {L, R, H};

int i, t;

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

{

a[i] = ' ';

b[i] = ' ';

}

struct machine

{

char sym;

sst cond;

direc move;

};

machine table [m][n];

cout << "enter elements ";

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

cin >> a[i];

table [q1][' '].sym = ' ';

table [q1][' '].cond = q1;

table [q1][' '].move = R;

table [q1]['0'].sym = '0';

table [q1]['0'].cond = q1;

table [q1]['0'].move = R;

table [q1]['1'].sym = '1';

table [q1]['1'].cond = q3;

table [q1]['1'].move = R;

table [q1]['*'].sym = ' ';

table [q1]['*'].cond = q0;

table [q1]['*'].move = H;

table [q2][' '].sym = ' ';

table [q2][' '].cond = q1;

table [q2][' '].move = R;

table [q2]['0'].sym = '*';

table [q2]['0'].cond= q3;

table [q2]['0'].move = L;

table [q2]['1'].sym = '1';

table [q2]['1'].cond= q2;

table [q2]['1'].move = L;

table [q2]['*'].sym = '*';

table [q2]['*'].cond= q2;

table [q2]['*'].move = L;

table [q3][' '].sym = '1';

table [q3][' '].cond= q2;

table [q3][' '].move = H;

table [q3]['0'].sym = ' ';

table [q3]['0'].cond= q2;

table [q3]['0'].move = H;

table [q3]['1'].sym = '1';

table [q3]['1'].cond= q3;

table [q3]['1'].move = R;

table [q3]['*'].sym = '*';

table [q3]['*'].cond= q3;

table [q3]['*'].move = R;

i =50;

t =0;

direc mv;

sst q = q1;

while (i < 50)

{

if (q == q0) break;

b[i] = table [q][a[i]].sym;

q = table [q][a[i]].cond;

mv = table [q][a[i]].move;

switch (mv)

{

case R : i++; break;

case L : i--; break;

}

t++;

}

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

cout << b[i];

return 0;

}

Умножение полиномов

#include <iostream.h>

struct polin

{

int koef;

int step;

polin *next;

};

void creat(polin *&nach, int n){

polin *p;

nach=NULL;

int i;

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

p=new polin;

cout<<"p->koef: ";

cin>>p->koef;

cout<<"p->step: ";

cin>>p->step;

p->next=nach;

nach=p;

}}

void pokaz(polin *nach){

polin *p;

cout<<endl;

p=nach;

while(p!=NULL){

cout<<p->koef<<"*x^"<<p->step<<"+";

p=p->next;

}}

void upor(polin *nach){

polin *p=nach;

polin *q;

int a, b;

while (p!=NULL){

q=p->next;

while (q!=NULL){

if (p->step<q->step){

a=p->koef;

p->koef=q->koef;

b=p->step;

p->step=q->step;

q->koef=a;

q->step=b;

}

q=q->next;

}

p=p->next;

}}

void prived(polin *nach){

polin *p;

p=nach;

polin *q, *pred_q;

while (p!=NULL){

pred_q=p;

q=p->next;

while (q!=NULL){

if (p->step==q->step){

p->koef=p->koef+q->koef;

pred_q->next=q->next;

}

pred_q=q;

q=q->next;

}

p=p->next;

}}

void proiz(polin *nach1, polin *nach, polin *&nach2){

polin *p=nach1, *q=nach, *h;

nach2=NULL;

while (p!=NULL){

q=nach;

while (q!=NULL){

h=new polin;

h->koef=p->koef*q->koef;

h->step=p->step+q->step;

h->next=nach2;

nach2=h;

q=q->next;

}

p=p->next;

}}