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

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

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль

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

Ответ
 
Опции темы Поиск в этой теме
Старый 30.05.2009, 20:02   #1
KOLYTFR
Пользователь
 
Регистрация: 26.04.2009
Сообщений: 17
Вопрос С++, массив, функции

Я написал прогу каторая выводит количество неповторяющихся в массиве чисел:

Цитата
#include <stdio.h>
#include <malloc.h>
#include <iostream.h>

int main()
{
int n;
printf ("Vvedite razmernost massiva: ");
scanf ("%d", &n);

float *A;
A = (float*)malloc(n*sizeof(float));
if(!A)
{
printf("*** Nepravilno!!! ***");
}

int r = 0 ;
for (int i = 0; i < n; i++)
{
r++;
printf ("%d element: \t", r);
scanf("%d", &A[i]);
}

int m, q, i = 0;
for (q = 0 ; q < n; q++ )
{
bool f = true;
for (m = 0; m < n; m++ )
{
if ((q != m) && (A[q] == A[m]))
{
f = false;
}
}
if (f) i++;
}

printf("\nKolichestvo chisel katorie ne povtoryautsa: %d", i);
scanf("%d", &m);

}


НО эту задачку нада сделать по принципу модульности, тобиш разсовать все методы по разным функциям. Я в функциях не очень панимаю... Начал с того, что попыталься засунуть ввод массива в соответствующую функцию:

Цитата
#include <stdio.h>
#include <malloc.h>
#include <iostream.h>


int Vvid(float *A, int n)
{
int i, r=0;
for (i = 0; i < n; i++)
{
r++;
printf ("%d element: \t", r);
scanf("%d", &A[i]);
}

return A[i];
}

int main()
{
int n, m, q, i, a = 0;;
bool f;
float *A;

printf ("Vvedite razmernost massiva: ");
scanf ("%d", &n);

A = (float*)malloc(n*sizeof(float));
if(!A)
{
printf("*** Nepravilno!!! ***");
}

Vvid(A, n);

for (q = 0 ; q < n; q++ )
{
f = true;
for (m = 0; m < n; m++ )
{
if ((q != m) && (A[q] == A[m]))
{
f = false;
}
}
if (f) a++;
}

printf("\nKolichestvo chisel katorie ne povtoryautsa: %d", i);
scanf("%d", &m);

}


Оно компилируеться, но в конце выводит неправильное i. Обьясните мне пожалуйста, что я сделал не так и как все правильно распределить по функциям.
KOLYTFR вне форума Ответить с цитированием
Старый 30.05.2009, 20:12   #2
Sazary
В тени
Старожил
 
Аватар для Sazary
 
Регистрация: 19.12.2008
Сообщений: 5,788
По умолчанию

Вот. И не забываем чистить память.
Код:
#include <stdio.h>
#include <malloc.h>
#include <iostream.h>
#include <conio.h>

float* createM(int n)
{
 float *A = (float*)malloc(n*sizeof(float));
 if(!A)
  {
   printf("*** Nepravilno!!! ***");
   return 0;
  }
 return A;
}

void fillM(float *A, int n)
{
 for (int i = 0; i < n; i++)
 {
 printf ("%d element: \t", i);
 scanf("%d", &A[i]);
 }
}

int fun(float *A, int n)
{
int m, q, i = 0;
for (q = 0 ; q < n; q++ )
 {
 bool f = true;
 for (m = 0; m < n; m++ )
  {
  if ((q != m) && (A[q] == A[m]))
   {
   f = false;
   }
  }
 if (f) i++;
 }
return i;
}

void freeM(float *A)
{
 free(A);
}

int main()
{
int n,count;
printf ("Vvedite razmernost massiva: ");
scanf ("%d", &n);

float *A = createM(n);
fillM(A,n);
count = fun(A,n);
freeM(A);
printf("\nKolichestvo chisel katorie ne povtoryautsa: %d", count);
getch();
return 0;
}
ps И код заключайте в теги CODE.
Вполне очевидно, чтобы что-то понять, необходимо книги читать.
Не нужно плодить бессмысленных тем. Вас Поиск избавит от многих проблем.

___________________________________ ___________________________________ _______
[=Правила форума=]_____[Поиск]_____[Литература по С++]____[Литература. Паскаль]
Sazary вне форума Ответить с цитированием
Старый 30.05.2009, 20:31   #3
KOLYTFR
Пользователь
 
Регистрация: 26.04.2009
Сообщений: 17
По умолчанию

Большое СПАСИБО Sazary!!!
KOLYTFR вне форума Ответить с цитированием
Старый 30.05.2009, 20:49   #4
KOLYTFR
Пользователь
 
Регистрация: 26.04.2009
Сообщений: 17
Вопрос

Да, а принцип модульности не подразумевает что ввод размерности массива тоже должен быть в функции?
KOLYTFR вне форума Ответить с цитированием
Старый 30.05.2009, 20:55   #5
Sazary
В тени
Старожил
 
Аватар для Sazary
 
Регистрация: 19.12.2008
Сообщений: 5,788
По умолчанию

Цитата:
Сообщение от KOLYTFR
Да, а принцип модульности не подразумевает что ввод размерности массива тоже должен быть в функции?
Ну если нужно, можете принимать в функции createM аргумент n по ссылке и уже там вводить размер.
То есть как-то так:
Код:
float* createM(int &n)
{
 printf ("Vvedite razmernost massiva: ");
 scanf ("%d", &n);
 float *A = (float*)malloc(n*sizeof(float));
 if(!A)
  {
   printf("*** Nepravilno!!! ***");
   return 0;
  }
 return A;
}
Вполне очевидно, чтобы что-то понять, необходимо книги читать.
Не нужно плодить бессмысленных тем. Вас Поиск избавит от многих проблем.

___________________________________ ___________________________________ _______
[=Правила форума=]_____[Поиск]_____[Литература по С++]____[Литература. Паскаль]
Sazary вне форума Ответить с цитированием
Старый 30.05.2009, 21:02   #6
KOLYTFR
Пользователь
 
Регистрация: 26.04.2009
Сообщений: 17
По умолчанию

Еще раз спасибо, теперь я разобралься!
KOLYTFR вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Массив ссылок на функции класса therom Общие вопросы C/C++ 0 30.09.2008 15:59
Можно ли вернуть динамический массив из функции? worldcentre Помощь студентам 2 06.12.2007 02:37
С++.Массив и подпрограмма функции SkyDreamer Помощь студентам 0 23.11.2007 20:45