PDA

Показать полную графическую версию : Оценить адекватность решения


Hector
20-01-2011, 20:05
Есть задание: Заданы два массива А(5) и В(4). Первым на печать вывести массив, содержащий наибольшее значение. Напечатать также это значение и его порядковый номер. Массивы создаются в динамической области памяти с использованием операций NEW и DELETE. Обращение к элементам массива – через косвенную адресацию
Вот решение:


#include "stdafx.h"
#include "stdio.h"
#include "stdlib.h"

const int MSIZE=5; // предельный размер массива

void input(int *M) // ввод массива
{
printf("\nInput massiv:\n\n");
int g;
for (g=0; g<MSIZE; g++)
{
printf("[%d]=",g+1);
scanf("%d",M+g);
}
}

void output(int *M) // вывод массива
{
printf("\nOutput massiv:\n\n");
int g;
for (g=0; g<MSIZE; g++)
printf("%d ",*(M+g));
printf("\n");
}

struct inf // структура для хранения инфы о массиве
{
int val, num;
};

struct inf max(int *M) // поиск макс элемента и его номера
{
struct inf result;
int maxValue, maxNum=1, g=0;
maxValue=*(M+g);
for (g=0; g<MSIZE; g++)
{
if (maxValue<*(M+g))
{
maxValue=*(M+g);
maxNum=g+1;
}
}
result.val=maxValue;
result.num=maxNum;
return result;
}

int _tmain(int argc, _TCHAR* argv[])
{
int *A, *B;
A=new int[MSIZE];
B=new int[MSIZE];
printf("Hello, enter please first massive\n");
input(A);
printf("\nEnter please second massive\n");
input(B);
struct inf infoA, infoB;
infoA=max(A);
infoB=max(B);
if (infoA.val>infoB.val)
{
output(A);
printf("max = %d, num=%d \n",infoA.val,infoA.num);
output(B);
}
else
{
output(B);
printf("max = %d, num=%d \n",infoB.val,infoB.num);
output(A);
}
system("pause");
return 0;
}


Вопрос: насколько оно адекватно с точки зрения стиля, быстродействия, правильности etc

Admiral
21-01-2011, 19:18
По заданию есть вопросы: коль размер массивов А(5) и В(4) задан наперёд, какой особый смысл в использовании операций NEW и DELETE?
Да и самое delete не используется в коде, а это утечка, хоть ОС сама позаботится об этом после отработки программы.

Hector
21-01-2011, 20:12
коль размер массивов А(5) и В(4) задан наперёд, какой особый смысл в использовании операций NEW и DELETE? »
не знаю, задание такое
delete не используется в коде »
сам уже обратил внимание, все?

Admiral
21-01-2011, 20:31
Hector по заданию это так, мысли в слух.
Не всё, если уж выделять память через new, то обязательно следует проверять успешность выделения - проверять на NULL. А после delete [] присвоить переменным NULL, можно одной строчкой - A = B = NULL.
5 и 4 в скобках это размерность массива? Если так, то при выделении нужно учитывать реальный размер для одного из массивов.

Hector
21-01-2011, 20:34
5 и 4 в скобках это размерность массива? »
да
учитывать реальный размер для одного из массивов »
подробнее, пожалуйста

Admiral
21-01-2011, 20:36
const int MSIZE=5; // предельный размер массива
...
A=new int[MSIZE];
B=new int[MSIZE]; »
Зачем B выделять 5, если по заданию 4?

Hector
21-01-2011, 20:38
не обратил внимания, поправим




© OSzone.net 2001-2012