Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > C/C++ программирование > Общие вопросы C/C++
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 15.04.2010, 03:06   #1
coNsept
Форумчанин
 
Аватар для coNsept
 
Регистрация: 14.12.2009
Сообщений: 716
По умолчанию Разбивка по функциям

Доброго времени суток уважаемые форумчане, у меня есть проблемка о которой мне очень, очень стыдно говорить, но тем не менее надо её решать.
Проблема моя заключается в следующем, я всегда пишу код в главной функции main(), оооооочень редко когда программу разбиваю по функциям, сейчас до такой степени привык всё делать в main'e что очень туго доходит как правильно возвращать значения из функций.
Пишу на завтра лабораторку, а хотелось бы показать это профу в более красивой форме, поэтому хочется разбить программу по функциям, есть желающий помочь за огромное человеческое спасибо ? (очень прошу)

Вот собственно код программы

Код:
#include <vcl.h>
#include <stdio.h>
#include <conio.h>
#include <windows.h>

#pragma hdrstop
#pragma argsused

const int ArraySize = 512;

int Vector[ArraySize], iCounter, n;

void main(void)
{

    do
    {

    BeginMark:

    clrscr();

    printf("Enter the array size: "); scanf("%d", &n);

    if (n <= 1 || n > ArraySize)
    { MessageBoxA(NULL, "You have entered the array dimension of more than 512 byte or else less 0", "Error!", MB_OK); }

    printf("\n[1].Input value from keybord\n");
    printf("[2].Input random value\n\n");

    switch (int Select = getch())
    {
        case '1':
        {
            for (iCounter = 0; iCounter < n; iCounter++)
            {
                printf("Vector[%d]: ", iCounter + 1); scanf("%d", &Vector[iCounter]);
            }
        } break;

        case '2':
        {
            randomize();
			
            for (iCounter = 0; iCounter < n; iCounter++)
            {
                Vector[iCounter] = rand() % 100;
            }
        } break;

        default: MessageBoxA(NULL, "This menu doesn't exist!", "Error!", MB_OK);
    }

    printf("Vector: ");

    for (iCounter = 0; iCounter < n; iCounter++)
    { printf("%d ", Vector[iCounter]); }

    int Sum = 0;

    for (iCounter = 0; iCounter < n; iCounter++)
    { Sum+= Vector[iCounter]; }
    printf("- Total: %d\n\n", Sum);

    if (Sum % n == 0)
    { printf("[%d].Divisible by %d and %d", Sum = true, n, Sum/= n); }
    else { printf("[%d].Not have divisible", Sum = false); }

    printf("\n\n[_Enter].Press key to restart\n");
    printf("[Escape].Press key to exit\n");

    if (getch() == VK_ESCAPE)
    { MessageBoxA(NULL, "Good luck!", "Error!", MB_OK); exit(0); }
    else if (getch() == VK_RETURN)
    { continue; }
    else exit(0);

    } while (true);
    
}
Вообще всё работает как по маслу, но хочется всё сделать по функциям...

Что я вообще пытался сделать, к примеру хотел подсчет суммы массива сделать в функцие
Код:
int CalculateSum(int Sum)
{  
    Sum = 0;

    for (iCounter = 0; iCounter < n; iCounter++)
    { Sum+= Vector[iCounter]; }

    return Sum;
}
Дальше пытался в main'e сделать следующее

Код:
if (Sum % n == 0)
{ printf("[%d].Divisible by %d and %d", Sum = true, n, Sum =  CalculateSum(Sum) / n); }
else { printf("[%d].Not have divisible", Sum = false); }
Sum = CalculateSum(Sum) / n // При вычисление делимого бывали моменты когда результат был не правильный (частенько).

Хорошо, одно значение вернуть, ещё как никак более менее понятно, но как вернуть пару значений
К примеру:
[%d].Divisible by %d and %d
1 дескриптор я хочу чтобы показывал мне true или false значения если значение делимое или нет.
2 n-размер массива, так как делимое делится на размер массива
3 Результат деленной суммы на размер массива.

Заранее благодарен за любую помощь

Последний раз редактировалось Stilet; 15.04.2010 в 07:43.
coNsept вне форума Ответить с цитированием
Старый 15.04.2010, 07:52   #2
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Цитата:
printf("[%d].Divisible by %d and %d", Sum = true, n, Sum = CalculateSum(Sum) / n);
Как твой компилятор себя чувствует после такого экстрима?

Цитата:
как вернуть пару значений
Ну в принципе ничто не мешает тебе описать структуру:
Код:
struct ItStruc{int i,n; bool b;};

ItStruc myfunc(){ 
 ItStruc q;
 q.i=5;q.n=3;q.b=true;
 return q;
}
int _tmain(int argc, _TCHAR* argv[])
{
	ItStruc w=myfunc();
	printf("%d %d %s",w.i,w.n,(w.b)?"Yes":"No");
	getchar();
	return 0;
}
Есть конечно и другие пути, но ИМХО этот самый простой.
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 15.04.2010, 10:40   #3
coNsept
Форумчанин
 
Аватар для coNsept
 
Регистрация: 14.12.2009
Сообщений: 716
По умолчанию

Можешь ещё предложить пару вариантов ?
coNsept вне форума Ответить с цитированием
Старый 15.04.2010, 11:43   #4
Гром
Старожил
 
Аватар для Гром
 
Регистрация: 21.03.2009
Сообщений: 2,193
По умолчанию

Еще один вариант - передавать значения в функцию по указателю или по ссылке. Тогда по выходу из функции они останутся модифицированы.
Простые и красивые программы - коды программ + учебник C++
Создание игры - взгляд изнутри - сайт проекта
Тема на форуме, посвященная ему же
Гром вне форума Ответить с цитированием
Старый 15.04.2010, 12:26   #5
coNsept
Форумчанин
 
Аватар для coNsept
 
Регистрация: 14.12.2009
Сообщений: 716
По умолчанию

Можешь показать примерчик на этой прогамме ?
coNsept вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Разбивка строки на лексемы Proger_1 Общие вопросы C/C++ 3 29.03.2010 20:38
Разбивка текста на части Алекс14 Microsoft Office Word 28 23.02.2010 14:53
Разбивка на страницы Busine2009 Microsoft Office Word 2 12.08.2009 09:33
Разбивка строки в Delphi Slava Помощь студентам 7 30.06.2009 09:05
Разбивка текста Vinslova Microsoft Office Excel 3 30.10.2008 12:49