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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 22.12.2009, 11:54   #1
spirit_trapper
Пользователь
 
Регистрация: 04.12.2009
Сообщений: 19
По умолчанию Представление минимального числа (Си)

Как в С можно представить минимальное число в массиве?
У меня есть код, в котором есть массив чисел. Числа определяются псевдо-случайно (rand()). И вот из этих выданных случайных чисел необходимо найти минимальное. Однако программа каждый раз выдает случайное число. Как можно представить минимальное число в функции min чтобы оно небыло случайным, а было минимальным среди полученных значений?

Вот такой код:

#include <stdio.h>
#include <ncurses.h>
#include <math.h>
#include <stdlib.h>
#define N 20

int RandomArr (double M[], double n, double min, double max);
int PrintArr (double M[],double n);
double min (double M[],double n);

int main ()
{
double M[N];
double n;
clear;
rand();
do
{
printf("Введите размер массива (3<=n<=20): ");
scanf("%lf",&n);
}
while (n<3||n>N);
RandomArr ( M,n,-100,100);
PrintArr(M,n);
printf("\nМинимальное число в массиве = %lf\n",min(M,n,min,max));
return 0;
getch();
}

int RandomArr (double M[], double n, double min, double max)
{
int i;
int a=(max-min+1)+min;
for(i=0;i<n;i++)
{
if (M[i] != a)
{M[i]=(rand()%100+1)/(rand()%2+1);}
}

return i;
}
int PrintArr (double M[],double n)
{
int i;

for(i=0;i<n;i++)
printf("%lf\t",M[i]);

return i;
}

double min (double M[], double n)
{
int mm;
int i;
for(i=ra;i<n;i++)
{
if (M[i]<M[i+1])
mm=M[i];
}
return mm;
}
spirit_trapper вне форума Ответить с цитированием
Старый 22.12.2009, 12:01   #2
Sweta
Форумчанин
 
Регистрация: 22.11.2007
Сообщений: 664
По умолчанию

Для начала
Код:
double n;
n- не может быть дробным- д.б целое, т.к это количество элементов в массиве
Неприятности приходят и уходят, а жизнь продолжается!
Sweta вне форума Ответить с цитированием
Старый 22.12.2009, 12:09   #3
Serebro
FORTRAN programmer
Форумчанин
 
Регистрация: 08.12.2009
Сообщений: 153
По умолчанию

Код:
double min (double M[], double n)
{
int mm;
int i;
for(i=ra;i<n;i++)
{
if (M[i]<M[i+1])
mm=M[i];
}
return mm;
}
Совершенно неправильное определение функции.
Serebro вне форума Ответить с цитированием
Старый 22.12.2009, 12:55   #4
spirit_trapper
Пользователь
 
Регистрация: 04.12.2009
Сообщений: 19
По умолчанию

Цитата:
Сообщение от Serebro Посмотреть сообщение
Совершенно неправильное определение функции.
Ну вот я и хочу узнать как правильно определить функцию минимального числа?
spirit_trapper вне форума Ответить с цитированием
Старый 22.12.2009, 14:25   #5
Sweta
Форумчанин
 
Регистрация: 22.11.2007
Сообщений: 664
По умолчанию

Код:
double min (double M[], double n)
{
int mm;
int i;
for(i=ra;i<n;i++)
{
if (M[i]<M[i+1])
mm=M[i];
}
return mm;
}
дело в том, что у Вас не только в этой функции ошибки.
У меня вся программа не компилится.
По поводу конкретной функции.
1)double min (double M[], double n)
самое первое double, это тип возвращаемой переменной -правильно.
double M[], double n -это аргументы функции, те переменные, которые мы ей передаем для работы, здесь явная ошибка как и во всех предыдущих.
double M[] - Это сам массив правильно,
double n - это д.б количество элементов массива, т.е целое положительное число -int n.
int mm; - неправильно, т.к. возвращаемое значение д.б. double, то
double mm, потомучто массив данного типа.
далее, необходимо этой переменной присвоить мин значение, лучше всего первого элемента массива, т.е double mm=M[0].
for(i=ra;i<n;i++) д.б.for(i=0;i<n;i++) надеюсь понятно почему
if (M[i]<M[i+1]) д.б.
if (M[i]<mm), ну а далее все правильно.
При вызове данной функции ей передаем два аргумента, т.е. вместо
Код:
printf("\nМинимальное число в массиве = %lf\n",min(M,n,min,max));
д.б.
Код:
printf("\nМинимальное число в массиве = %lf\n",min(M,n));
Теперь с учетом выше сказанного корректируйте свою программу и пробуйте далее. Возникшие вопросы сюда.
Неприятности приходят и уходят, а жизнь продолжается!
Sweta вне форума Ответить с цитированием
Старый 22.12.2009, 15:49   #6
spirit_trapper
Пользователь
 
Регистрация: 04.12.2009
Сообщений: 19
По умолчанию

Sweta

Спасибо огромное. Помогло. Минимум вычисляется. Вот такой код получился в результате:

Код:
double min (double M[], double n)
{
	  double mm=M[0];
	  int i;  
	  for(i=0;i<n;i++)
	  {
		if (M[i]<mm)
		mm=M[i];
	  }
	  return mm;
}
spirit_trapper вне форума Ответить с цитированием
Старый 22.12.2009, 15:57   #7
Sweta
Форумчанин
 
Регистрация: 22.11.2007
Сообщений: 664
По умолчанию

Хоть и вычисляется, но читали не внимательно. д.б.

Код:
double min (double M[], int n)
{
	  double mm=M[0];
	  int i;  
	  for(i=0;i<n;i++)
	  {
		if (M[i]<mm)
		mm=M[i];
	  }
	  return mm;
}
Неприятности приходят и уходят, а жизнь продолжается!
Sweta вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Представление ориентированного графа Sheh C++ Builder 2 16.02.2011 19:28
Перевод в числа в текстовое представление (Pascal) -SG- Помощь студентам 4 26.11.2009 18:04
Различные представление числа N в виде сумм Дамир Помощь студентам 4 07.12.2008 21:57
Как убрать экспонециальное представление числа alf19 Microsoft Office Excel 2 22.07.2008 16:45
Просмотр представление числа в памьяти IgorKr Общие вопросы Delphi 1 21.11.2007 08:47