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

Автор работы: Пользователь скрыл имя, 22 Октября 2010 в 13:05, Не определен

Описание работы

Лабораторная работа

Файлы: 1 файл

Программирование на языках высокого уровня ч2.doc

— 103.00 Кб (Скачать файл)

Программирование  на языках высокого уровня ч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;

Информация о работе Программирование на языках высокого уровня