Имя пользователя:
Пароль:  
Помощь | Регистрация | Забыли пароль?  | Правила  

Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Программирование и базы данных » C/C++ - Оценить адекватность решения

Ответить
Настройки темы
C/C++ - Оценить адекватность решения

Аватара для Hector

Misanthrope


Сообщения: 474
Благодарности: 38


Конфигурация

Профиль | Отправить PM | Цитировать


Есть задание: Заданы два массива А(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

-------
Information must be free!
Нет границ, есть только препятствия


Отправлено: 20:05, 20-01-2011

 

Ветеран


Сообщения: 3320
Благодарности: 916

Профиль | Отправить PM | Цитировать


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

Отправлено: 19:18, 21-01-2011 | #2



Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети.

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


Аватара для Hector

Misanthrope


Сообщения: 474
Благодарности: 38

Профиль | Отправить PM | Цитировать


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

-------
Information must be free!
Нет границ, есть только препятствия


Отправлено: 20:12, 21-01-2011 | #3


Ветеран


Сообщения: 3320
Благодарности: 916

Профиль | Отправить PM | Цитировать


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

Отправлено: 20:31, 21-01-2011 | #4


Аватара для Hector

Misanthrope


Сообщения: 474
Благодарности: 38

Профиль | Отправить PM | Цитировать


Цитата Admiral:
5 и 4 в скобках это размерность массива? »
да
Цитата Admiral:
учитывать реальный размер для одного из массивов »
подробнее, пожалуйста

-------
Information must be free!
Нет границ, есть только препятствия


Отправлено: 20:34, 21-01-2011 | #5


Ветеран


Сообщения: 3320
Благодарности: 916

Профиль | Отправить PM | Цитировать


Цитата Hector:
Код: Выделить весь код
const int MSIZE=5; // предельный размер массива
...
A=new int[MSIZE]; 
B=new int[MSIZE];
»
Зачем B выделять 5, если по заданию 4?

Отправлено: 20:36, 21-01-2011 | #6


Аватара для Hector

Misanthrope


Сообщения: 474
Благодарности: 38

Профиль | Отправить PM | Цитировать


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

-------
Information must be free!
Нет границ, есть только препятствия


Отправлено: 20:38, 21-01-2011 | #7



Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Программирование и базы данных » C/C++ - Оценить адекватность решения

Участник сейчас на форуме Участник сейчас на форуме Участник вне форума Участник вне форума Автор темы Автор темы Шапка темы Сообщение прикреплено

Похожие темы
Название темы Автор Информация о форуме Ответов Последнее сообщение
Прошу оценить сборочку Steef07 Выбор отдельных компонентов компьютера и конфигурации в целом 14 30-10-2008 08:12
Прошу оценить конфигурацию. elalex Выбор отдельных компонентов компьютера и конфигурации в целом 4 03-10-2008 11:05
Оценить конфигурацию rooman Выбор отдельных компонентов компьютера и конфигурации в целом 25 23-08-2008 21:39
Просьба оценить конфу Malkavian Выбор отдельных компонентов компьютера и конфигурации в целом 10 07-08-2008 22:14
Прошу оценить конфигурацию бюджетника akrobat Выбор отдельных компонентов компьютера и конфигурации в целом 14 27-04-2008 12:05




 
Переход