Компьютерный форум OSzone.net  

Компьютерный форум OSzone.net (http://forum.oszone.net/index.php)
-   Программирование и базы данных (http://forum.oszone.net/forumdisplay.php?f=21)
-   -   Оценить адекватность решения (http://forum.oszone.net/showthread.php?t=197176)

Hector 20-01-2011 20:05 1593352

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

#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=0g<MSIZEg++)
    {
        
printf("[%d]=",g+1);
        
scanf("%d",M+g);
    }
}

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

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

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

int _tmain(int argc_TCHARargv[])
{
    
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 infoAinfoB
    
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 1594205

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

Hector 21-01-2011 20:12 1594250

Цитата:

Цитата Admiral
коль размер массивов А(5) и В(4) задан наперёд, какой особый смысл в использовании операций NEW и DELETE? »

не знаю, задание такое
Цитата:

Цитата Admiral
delete не используется в коде »

сам уже обратил внимание, все?

Admiral 21-01-2011 20:31 1594265

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

Hector 21-01-2011 20:34 1594266

Цитата:

Цитата Admiral
5 и 4 в скобках это размерность массива? »

да
Цитата:

Цитата Admiral
учитывать реальный размер для одного из массивов »

подробнее, пожалуйста

Admiral 21-01-2011 20:36 1594268

Цитата:

Цитата Hector
Код:

const int MSIZE=5; // предельный размер массива
...
A=new int[MSIZE];
B=new int[MSIZE];

»

Зачем B выделять 5, если по заданию 4?

Hector 21-01-2011 20:38 1594269

не обратил внимания, поправим


Время: 10:35.

Время: 10:35.
© OSzone.net 2001-