Что произойдет, если указатель (адрес) передать в качестве параметра в функцию?



ЭТО ПОЗВОЛИТ ВЕРНУТЬ ВСЕ ЗНАЧЕНИЯ, ХРАНЯЩИЕСЯ ПО ЭТОМУ АДРЕСУ В ГЛАВНУЮ ФУНКЦИЮ

 

Примеры программ

ЗАДАЧА 1. В заданном массиве найти длину самой длинной серии элементов, состоящей из единиц.

Fl были (1) или нет (0) серии элементов из единиц, k-длина текущей серии, max – самая длинная серия.

intmain()

{

int *x,max,i,k,fl,n,b;

printf("\n n=");

scanf("%d",&n);

x=new int[n];

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

{

printf("\n x(%d)=",i);

scanf("%d",&b);

*(x+i)=b;

}

for (k=1,fl=0,i=0;i<n-1;i++)

{

if (*(x+i)==1 && *(x+i+1)==1)

k++;

else if (k!=1)

{

if (!fl)

{

max=k;

fl=1;

k=1;

}

else if (k>max)

max=k;

k=1;

}

}

if (fl==0)

printf("V massive net seriy iz 1\n");

else

{

if (k>max)

max=k;

printf("\n %d",max);

}

delete [] x;

return 0;

}

 

ЗАДАЧА 2. Из массива целых чисел удалить все простые числа меньшие среднего арифметического. Полученный массив упорядочить по возрастанию.

Кроме главной функции main() при решении этой задачи необходимо написать следующие функции:

-bool prostoe(int n), которая будет проверять является ли число n простым;

-void udal(int *x, int m, int *n) функция удаления элемента с номером m в массиве x из n элементов.

-void upor(int *x, int N, bool pr=true) функция упорядочивания массива по возрастанию (если pr=true) или по убыванию (если pr=false);

-float sr_arifm(int x[], int n) функция вычисления среднего арифметического в массиве x из n элементов.

Блок-схема функции prostoe

Блок-схема функции udal

 

 

Блок-схема функции sr_arifm

 

Блок-схема функции upor

#include "stdafx.h"

#include <iostream.h>

#include <malloc.h>

bool prostoe(int n)

{

bool pr;

int i;

for(pr=true, i=2;i<=n/2;i++)

if(n%i==0)

{pr=false;break;}

return(pr);

}

void udal(int *x, int m, int *n)

{

int i;

for(i=m;i<=*n-2;i++)

*(x+i)=*(x+i+1);

 --*n;

realloc((int *)x,*n*sizeof(int));

}

void upor(int *x, int n, bool pr=true)

{

int i,j,b;

if (pr)

{

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

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

if (*(x+i)>*(x+i+1))

{

b=*(x+i);

*(x+i)=*(x+i+1);

*(x+i+1)=b;

}

}

else

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

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

if (*(x+i)<*(x+i+1))

{

b=*(x+i);

*(x+i)=*(x+i+1);

*(x+i+1)=b;

}

}

float sr_arifm(int x[], int n)

{

int i;

float s=0;

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

s+=x[i];

if (n>0)

return(s/n);

else return 0;

}

int main()

{

int *a,n,i;

float sr;

cout<<"n=";

cin>>n;

a=(int *)calloc(n,sizeof(int));

cout << "Vvedite massiv A\n";

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

cin>>*(a+i);

sr=sr_arifm(a,n);

cout<<"sr="<<sr<<endl;

for(i=0;i<n;)

{

if(prostoe(*(a+i))&& *(a+i)<sr)

udal(a,i,&n);

else i++;

}

cout << "Massiv A\n";

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

cout<<*(a+i)<<"\t";

cout<<endl;

upor(a, n);

cout << "Upor Massiv A\n";

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

cout<<*(a+i)<<"\t";

cout<<endl;

free(a);

return 0;

}

 

n=10

Vvedite massiv A

6 20 5 3 10 301 17 11 6 8

sr=38.7

Massiv A

6 20 10 301 6 8

Upor Massiv A

6 6 8 10 20 301

Press any key to continue

 

Контрольные вопросы

1. Какие массивы называются динамическими?

2. Что называется указателем?

3. Каким образом описывается указатель?

4. Укажите основные операции, используемые при работе с указателями.

5. Охарактеризуйте операцию присваивания указателей.

6. Охарактеризуйте арифметические операции над адресами.

7. Укажите алгоритм выделения участка памяти заданного размера (динамический массив) с помощью указателей для хранения данных определенного типа.


Дата добавления: 2019-09-13; просмотров: 234; Мы поможем в написании вашей работы!

Поделиться с друзьями:






Мы поможем в написании ваших работ!