Задача

Задача Программирование на языках высокого уровня 3

Работа добавлена на сайт bukvasha.net: 2015-10-29

Поможем написать учебную работу

Если у вас возникли сложности с курсовой, контрольной, дипломной, рефератом, отчетом по практике, научно-исследовательской и любой другой работой - мы готовы помочь.

Предоплата всего

от 25%

Подписываем

договор

Выберите тип работы:

Скидка 25% при заказе до 22.11.2024



Программирование на языках высокого уровня ч2
Лабораторная №1
Задача 1
Составить программу на языке С/С++, содержащую:

- объявления и инициализацию указателей на различные типы объектов:

  переменные, массивы, структуры;

- объявления и инициализацию указателей с различными модификаторами (const, near, far, huge);

- преобразования указателей различных типов, в том числе типа void.
#include <stdio.h>

#include <conio.h>

#include <iostream.h>
void main(void)

  {

      //переменные

      const double Eu=8.1;

      double *pEu=(double*)&Eu;

     *pEu=4.6;                                                                        

     //изменения константы Eu с помощью указателя

      cout<<Eu<<"\n";
//массивы

float Y[]={1,2,3,4,5,6};                      //указатель на масив вещественного типа

float *pY=Y;                                                  //pY указывает на начало массива y[]
//структуры

struct komp     

            {

            char proc [20];

            int memory;

            };        

komp *Celeron=NULL;                      //инициализированный указатель на объект типа komp

komp MStar[]={"Celeron2000",512,"Pentium2500",512};

Celeron=&MStar[0];

cout<<"\n"<<Celeron<<"\t"<<Celeron->proc<<"\t"<<Celeron->memory;
//модификаторами (const, near, far, huge)
double St[]={8.1,3.3,1.4};

double *const pSt=&St[2];                 //инициализированный константный указатель

                                                           //на элемент массива типа float
//преобразования указателей различных типов
unsigned long A=12345678;

char *char_=(char*)&A;                                 //указатель на объект типа char

int *int_=(int*)&A;                                          //указатель на объект целого типа

float *float_=(float*)&A;                     //указатель на объект вещественного типа

cout<<A<<"\t"<<(void*)char_<<"\t"<<int_<<"\t"<<float_<<"\n";

cout<<A<<"\t"<<*char_<<"\t"<<*int_<<"\t"<<*float_;

cerr<<"  ";
void *vp;

int i=77;

float f=2.7;

vp=&i;

cout<<"*(int*)vp="<<*(int*)vp;

vp=&f;

cout<<"*(float*)vp="<<*(float*)vp;
cerr<<" ";

getch();

}
Задача 2

Составить программу на языке С/С++, содержащую:

- простейшие действия с одномерными массивами (как числовыми, так и символьными),

  используя указатели, методы доступа к элементам массивов через указатели;

- простейшие действия с многомерными массивами (как числовыми, так и символьными),

  используя указатели, методы доступа к элементам массивов через указатели;

- всевозможные операции с указателями.

*/
#include <stdio.h>

#include <conio.h>

#include <iostream.h>
void main(void)

{
//одномерные массивы

            int x[]={4,5,6,7,2,4,6};

            char ch[]="ABCD";

            char ch1[]={'A','B','C','D'};

            int *px=x;

            char *pch=ch;

            char *pch1=ch1;

           

            for(int i=0;i<7;i++) cout<<*(px+i)<<"\t";

            cout<<pch<<"\n";

            for(i=3;i>=0;i--) cout<<*(pch1+i)<<"\t";

            cout<<"\n";

            for(i=0;i<4;i++) cout<<*(pch1++)<<"\t";
//многомерные массивы

            int A[3][3]={1,2,3,4,5,6,7,8,9};

            char B[3][3]={'A','B','C','D','E','F','G','H','\0'};

           

            cout<<*(*(A+1))<<"\n";
            int C[3][2][4]=

            {          0,                     1,                     2,                     3,

                        10,                   11,                   12,                   13,

                        100,     101,     102,     103,

                        110,     111,     112,     113,

                        200,     201,     202,     203,

                        210,     211,     212,     213

            };

            cout<<***C<<"\n";

            cout<<*(*(*(C+1)+1)+3)<<"\n";

            int sum=0;

            for(int i=0;i<3;i++)

                        for (int j=0;j<2;j++)

                        {

                                   cout<<"\n";

                                   for(int k=0;k<4;k++)

                                   {

                                               sum+=*(*(*(C+i)+j)+k);

                                               cout<<*(*(*(C+i)+j)+k)<<"\t";

                                   }

                        }

            cout<<"\n"<<sum;
cerr<<" ";
}
Задача 3

Составить программу на языке С/С++, содержащую:

- объявления указателей на функции и передачи аргументов с помощью указателей;

- доступ к содержимым по указателям.

*/
#include <stdio.h>

#include <conio.h>

#include <iostream.h>
void f1(int *x)

{

            cout<<*x;

}
int** f2(int *x)

{

            int **z= new int*[*x];

            for (int i=0;i<*x;i++) z[i] = new int[*x];

            for (i=0;i<(*x);i++)

                        for (int j=0;j<(*x);j++)

                                   *(*(z+i)+j)=i+j;

            return z;

}
void main(void)

{

            int A=5;

            void (*fun)(int*);

            fun=f1;

            int *pa=&A;

            (*fun)(pa);

           

            int **pf=NULL;
            int (**(*fun1)(int*));

            fun1=f2;

            pf=(*f2)(pa);
            cout<<"\n"<<**pf;
            for (int i=0;i<(*pa);i++)

            {

                        cout<<"\n";

                        for (int j=0;j<(*pa);j++)

                                   cout<<*(*(pf+i)+j)<<"\t";

            }

cerr<<" ";

}
Задача 4

Составить программу на языке С/С++, содержащую:

- динамическое размещение массивов;

- интерпретацию составных описателей.
11
Задача 1

а) Создать программу определения факториала числа n, использующую цикл (любой - for или while).

б) Составить описание рекурсия математическими терминами.

в) Разработать схему рекурсивных вызовов.

г) Составить программу определения факториала числа n, использующую рекурсию.

д) Проанализировать работу рекурсивной функции с помощью отладчика.

е) Сделать сравнительный анализ работы двух программ.

*/
а)

#include <iostream.h>
void main()

{

    int i;

    cout << "Введите число:";

    cin >> i;

    // расчет факториала

    int j, fact=1;

    for (j=i; j>=1; j--) fact*=j;

    cout << "Факториал равен:" << fact;
}
г)

#include <iostream>
long fact(int f)

{

if (f<0) return (0);

if (f==0) return (1);

return (f*fact(f-1));

}
Задача 2

Написать программу рекурсивной функции Аккермана с использованием основной функции ackr и

вспомогательной функции smacc. Составить описание рекурсия математическими

терминами. Разработать схему рекурсивных вызовов. Проанализировать работу рекурсивной

функция с помощью отладчика.

*/
#include <stdio.h>

#include <conio.h>
void main(void)

{

            //clrscr();

            int x,y,n;

            long t;

            int ackr(int,int,int);

            printf("\nВведите 3 целых положительных числа:\n");

           

            n=3,x=3,y=3;

            //scanf("%d%d%d",&n,%x,&y);

            t=ackr(n,x,y);

            printf("Результат вычисления функции Акермана = %ld",t);

            getch();
}
int smacc (int n, int x)

{

            switch (n)

            {

            case 0: return (x+1);

            case 1: return (x);

            case 2: return (0);

            case 3: return (1);

                        default: return (2);

            }

}

           

int ackr(int n, int x, int y)

{

            int z;

            int smacc(int,int);

            if(n==0||y==0)z=smacc(n,x);

            else

            {

                        z=ackr(n,x,y-1);

                        z=ackr(n-1,z,x);

            }

            return z;

}
Задача З

Подобрать собственный пример, иллюстрирующий работу рекурсивной функции.

Составить программу, выполнить ее анализ.

*/
Рекурсивный ввод и печать списка.
#include <stdlib.h>

#include <stdio.h>
struct cell

{

            char sign[10];

            int weight;

            struct cell *pc;

};
struct cell* input(void)

{

            struct cell *p;

            p=(struct cell *)malloc(sizeof(struct cell));

            printf("Sign=");

            scanf("%s",& p->sign);

            printf("Weight=");

            scanf("%d",& p->weight);

            if(p->weight==0)

            {

                        free(p);

                        return NULL;

            }

            p->pc=input();

            return p;

}
void output(struct cell *p)

{

            if (p==NULL)

            {

                        printf("\nEND");

                        return;

            }

            printf("\nsign=%s\tweight=%d",p->sign,p->weight);

            output(p->pc);

}
void main(void)

{

struct cell *beg=NULL;

beg=input();

printf("\nBegin");

output(beg);

}
12
Задача 1

Создать несвязанный числовой список в виде массива. Распечатать его.

Выполнить следующие операции с несвязанным списком:

а) найти максимальный по модулю элемент;

б) вставить за ним новый элемент, равный по величине, но противоположный по знаку;

в)  Новый список распечатать.

*/
#include <stdio.h>

#include <conio.h>

#include <iostream.h>
int abc (int x) {return x>0?x:-x;}
void main(void)

{
            int d[100]={1,2,300,-4,-50,6,7},L=7;

            int max = 0;
//максимальный по модулю элемент

            for (int i=0;i<L;i++)

                        if(abc(d[i])>abc(d[max])) max=i;

            printf("MAX element= |%d|",d[max]);
//добавление нового элемента за МАХ элеме

            for (int j=L-1; j>max; j--)

                        d[j+1]=d[j];

            d[max+1]=-d[max]; L++;

           

//исключить первый элемент списка

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

                        d[j]=d[j+1];

            L--;

           

//новый список

            cout<<"\n";     

            for (i=0;i<L;i++) cout<<d[i]<<"\t";
cerr<<" ";

}
Задача 2

Создать связанный числовой список. Распечатать его. Выполнить следующие операции со связанным списком:

а) найти максимальный по модулю элемент;

б) вставить за ним новый элемент, равный по величине, но противоположный по знаку;

в) исключить первый элемент списка. Новый список распечатать.

*/
#include <stdio.h>

#include <conio.h>

#include <iostream.h>
int abc (int x) {return x>0?x:-x;}
struct ND

{

            int val;

            struct ND * n;

} *dl=NULL, *r, *p=NULL;
void main(void)

{

int mas[]={1,2,3,-50,6,30,1,2,3};

for(int i=0;i<sizeof(mas)/sizeof(mas[0]);i++)

{

               r=new ND;

               r->val=mas[i];

               r->n=NULL;     

               if(dl==NULL)

               {      

                           dl=r;

                           p=r;

               }

               else

               {

                           p->n=r;

                           p=r;

               }

}

//максимальный по модулю элемент

p=dl;

int MAX=dl->val;

while((p->n)!=NULL)

{

            p=p->n;

            if(abc(p->val)>abc(MAX)) MAX=p->val;

}

cout<<"\n";     

printf("MAX element= |%d|",MAX);
//добавление нового элемента за МАХ

p=dl;

while((p->n)!=NULL)

{

            p=p->n;

            if(p->val==MAX)

            {

                        r=new ND;

                        r->n=p->n;

                        r->val=-MAX;

                        p->n=r;

            }

}
//исключить первый элемент списка

            p=dl;

            dl=dl->n;

            delete (p);
//новый список
                        p=dl;

                        cout<<"\nspisok\n";     

        while(p!=NULL)

                        {

                                   cout<<p->val<<"\t";

                                   p=p->n;

                        }

cerr<<" ";

}
Задача 3

Создать связанный числовой список типа очередь из 5 объектов. Распечатать его. Выполнить следующие операции со связанным списком:

а) добавить два новых объекта в очередь. Распечатать очередь;

б) поменять местами первый и последний объект в очереди. Распечатать очередь;

в) удалить из очереди первых три объекта. Распечатать очередь.

*/
#include <stdio.h>

#include <conio.h>

#include <iostream.h>

#include <stdlib.h>
struct elem {

            int inf;

            struct elem *link;

} *begq=NULL, *endq=NULL;
void addel(int val)

{

            struct elem *p= new struct elem;

            p->inf=val;

            p->link=NULL;

            if(endq==NULL) begq=p;

            else endq->link=p;

            endq=p;

}
int getdelel(void)

{

            struct elem *p;

            int temp;

            temp=begq->inf;

            p=begq;

            begq=p->link;

            if(begq==NULL) endq=NULL;

            delete p;

            return temp;

}
void output(struct elem *p)

{

            if (p==NULL)

            {

                        printf("\nEND");

                        return; 

            }

            printf("\tinf=%i",p->inf);
 output(p->link);         

}
void main(void)

{
int mas[]={10,20,30,1,2,3};

for (int i=0;i<sizeof(mas)/sizeof(mas[0]);i++) addel(mas[i]);

output(begq);
int number;

while (1)

{

            printf("\n 1 - добавить два новых объекта в очередь");

            printf("\n 2 - поменять местами первый и последний объект в очереди");

            printf("\n 3 - удалить из очереди первых три объекта");

            printf("\n 4 - Exit");

   while (1)

            {

            printf("\n Menu:");

            scanf("%d",&number);

            if(number>0&&number<5) break;

            printf("\n Error menu");

            while (getchar()!='\n');

            }

   switch (number)

      {

            case 1:

                                   {

                                               //а) добавить два новых объекта в очередь. Распечатать очередь;

                                              

                                               scanf("%d",&number);

                                               addel(number);

                                               scanf("%d",&number);

                                               addel(number);

                                               break;

                                   }
            case 2:

                                   {

                                               //б) поменять местами первый и последний объект в очереди. Распечатать очередь;

                                               int temp = getdelel();

                                               int endelement= endq->inf;

                                               while (begq->inf != endelement) addel(getdelel());

                                               addel(temp);                                       

                                               break;

                                   }

            case 3:

                                   {

                                               //в) удалить из очереди первых три объекта. Распечатать очередь.

                                               for (i=0;i<2;i++) getdelel();

                                               break;

                                   }

           

                        case 4: exit(0); break;

                                    default: exit(0);

      }
printf("\nnew spisok\n");

output(begq);

cerr<<" ";

getch();

}

}
/*

struct cell* input(void)

{

            struct cell *p;

            p=(struct cell *)malloc(sizeof(struct cell));

            printf("Sign=");

            scanf("%s",& p->sign);

            printf("Weight=");

            scanf("%d",& p->weight);

            if(p->weight==0)

            {

                        free(p);

                        return NULL;

            }

            p->pc=input();

            return p;

}
Задача 4

Создать связанный числовой список типа стек из 5 объектов. Распечатать его. Выполнить следующие операции со связанным списком:

а) добавить два новых объекта в стек. Распечатать стек;

б) поменять местами первый и последний объект в стека. Распечатать стек;

в) удалить из стека первых три объекта. Распечатать стек.
15
/*

struct list

{

            int value;

            struct list *next;

};

list *hear=NULL;

int count=0;
//void show
void show(struct cell *p)

{

            if (p==NULL)

            {

                        printf("\nEND");

                        return;

            }

            printf("\nadress=%p\tvalue=%d",p,p->value);

            output(p->pc);

}
void add_head (long value)

{

            count++;

            list *old_head=head;

            head=(struct list *)malloc(sizeof(struct list));

            head->next=old_old_head;

            head->value=value;

}
void insert (int pos,long value)

{

            list *target;

            list *old_next;

            int i=0;

            if(head!=NULL)

            {

                        target=head;

                        while((i<pos)&&(target!=NULL))

                        {

                                   target=target->next;

                                   i++;

                        }

                        if(i!=pos) return;

                        old_next=target->next;

                        target=target->next=(struct list *)malloc(sizeof(struct list));

                        target->value=value;

                        target->next=old_next;

                        count+;

            }

            else

            {

                        target=head=(struct list *)malloc(sizeof(struct list));

                        target->next=NULL;

                        target->value=value;

                        count+;

            }

}
void delete_any (int pos)

{

            if(pos<0) return;

            list *previous;

            int i=0;

            if(head!=NULL)

            {

                        if(pos==0)

                        {

                                   list *next_item=head->next;

                                   free(head);

                                   head=next_item;

                        }

                        else

                        {

                                   previous=head;

                                   pos--;

                                   while((i<pos)&&(previous!=NULL))

                                   {

                                               previous=previous->next;

                                               i++;

                                   }

                                   if(i!=pos) return;

                                   list *next_item=previous->next->next;

                                   free(previous->next);

                                   previous->next=next_item;

                        }

}

*/
16

1. Реферат на тему Suicide The Final Solution Essay Research Paper
2. Статья на тему История изучения северокавказского мусульманского города системный анализ источников и эволюции развития
3. Реферат Сейм Республики Польша
4. Реферат Электронные системы расчетов в коммерческом банке
5. Контрольная работа Цукрове виробництво
6. Реферат Мау-мау
7. Сочинение на тему Пушкин а. с. - Авторская ирония в романе
8. Реферат на тему Julius Caesar Essay Research Paper The storyof
9. Реферат Правовые отношения в сфере аграрного права
10. Реферат Семейный уклад Древнего Китая