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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 26.05.2008, 14:47   #1
conqueror
Пользователь
 
Регистрация: 15.01.2008
Сообщений: 31
Восклицание Задача на массив [Borland C++]

Помогите с задачей

В массиве, содержащем не более 40 элементов, определить номер элемента, корень из которого минимальный. Корень извлекать только из положительных чисел. Найти корень. Формат числа +-цц.ц

Последний раз редактировалось conqueror; 26.05.2008 в 16:34.
conqueror вне форума Ответить с цитированием
Старый 26.05.2008, 17:50   #2
gamezzz
Новичок
Джуниор
 
Регистрация: 23.05.2008
Сообщений: 1
По умолчанию Ответ

Береш каждый элемент массива и перебираеш, т.е. находиш его корень, новые элементы записуеш в другой массив, а уж потом в нем находиш наименший элемент. напиремер так:

...
for (i=0;i<5;i++)
if (a[i]>0) b[j]=sqrt(a[i]);
...
Потом находиш наименший элемент и все...
gamezzz вне форума Ответить с цитированием
Старый 26.05.2008, 19:41   #3
conqueror
Пользователь
 
Регистрация: 15.01.2008
Сообщений: 31
По умолчанию

Это я понял, но хотелось бы поподробнее. В С++ я практически ноль, год назад делал подобную задачу на бейсике, а вот с Си разобраться не могу
conqueror вне форума Ответить с цитированием
Старый 27.05.2008, 10:02   #4
conqueror
Пользователь
 
Регистрация: 15.01.2008
Сообщений: 31
По умолчанию

На Basic это выглядит примерно так:

Код:
Private Sub Form_Load()
    Randomize 'инициализация датчика случ. чисел
    Me.AutoRedraw = True 'авто-перерисовка формы
    Dim a(40) As Integer 'массив 40 чисел
    Dim i As Integer ' счётчик цикла
    Dim sum As Integer ' среднее ариф.
    Dim x As Integer ' номер мин. элемен.
    Dim min As Double ' минимальный корень числа
    Dim count As Integer ' количество положительных чисел
    
    Print "Значения массива :"
    For i = 1 To 40
        a(i) = Rnd * 1000 - 500
        Print a(i); ' вывод значений массива на форму
        If i = 20 Then Print
    Next
    
    Print
    Print
    Print "1) определить номер элемента, корень из которого минимальный"
    min = 500 ' макс. возможное число
    sum = 0
    count = 0
    For i = 1 To 40 ' ищем мин. корень
        If a(i) > 0 Then ' если число больше нуля
            If (min > Sqr(a(i))) Then
                min = Sqr(a(i))
                x = i
            End If
            count = count + 1
            sum = sum + a(i)
        End If
    Next
    Print "Номер - "; x
    Print
    Print
    Print "2) Найти среднее арифметическое для элементов, из которых корень извлекался"
    Print "Среднее фрифметическое = "; sum / count
End Sub
Как применить это для C++?
conqueror вне форума Ответить с цитированием
Старый 27.05.2008, 12:37   #5
Sweta
Форумчанин
 
Регистрация: 22.11.2007
Сообщений: 664
По умолчанию

Т.к. в Бейсике "0", то может с некоторыми неточностями.
// Как это сделать не знаю
Private Sub Form_Load()
Randomize 'инициализация датчика случ. чисел
Me.AutoRedraw = True 'авто-перерисовка формы
//



# include<conio.h>
# include<match.h> //д.б библиотека мат ф-ций, уточни имя
int a[40] ; //массив 40 чисел
int i; //счётчик цикла
int sum; //As Integer ' среднее ариф.
int x; //As Integer ' номер мин. элемен.
double min; // As Double ' минимальный корень числа
int count; //As Integer ' количество положительных чисел

//Здесь не поняла, что делать, напиши коментарий

Print "Значения массива :"
For i = 1 To 40
a(i) = Rnd * 1000 - 500
Print a(i); ' вывод значений массива на форму
If i = 20 Then Print
Next

Print
Print
Print "1) определить номер элемента, корень из которого минимальный"

min = 500 ' макс. возможное число
//--------------------------------------------

sum = 0
count = 0
for (i = 0;i<40; i++) //ищем мин. корень
{
if (a[i] > 0) // если число больше нуля
{
if (min > Sqr(a[i]))
{
min = Sqr(a(i));
x = i;
sum = sum + a[i];
}
}
}
cout>> "Номер - ">> x >>endl;

cout>> "Среднее фрифметическое = ">> sum / count ;
getchar(); // Выход по нажатию любой клавиши
}
Неприятности приходят и уходят, а жизнь продолжается!

Последний раз редактировалось Sweta; 27.05.2008 в 12:41.
Sweta вне форума Ответить с цитированием
Старый 27.05.2008, 12:40   #6
conqueror
Пользователь
 
Регистрация: 15.01.2008
Сообщений: 31
По умолчанию

Огромное спасибо!
conqueror вне форума Ответить с цитированием
Старый 27.05.2008, 21:24   #7
MaTBeu
Eclipse Foundation
Старожил
 
Аватар для MaTBeu
 
Регистрация: 19.09.2007
Сообщений: 2,604
По умолчанию

Sweta
Инициализация генератора случайных чисел производится вызовом функции randomize(); (для нее нужно подключить заголовочный файл stdlib.h). А перерисовка... в Билдере она делается так
Код:
Form1->Repaint();
MaTBeu вне форума Ответить с цитированием
Старый 28.05.2008, 11:45   #8
Sweta
Форумчанин
 
Регистрация: 22.11.2007
Сообщений: 664
По умолчанию

Я там сделаала в спешке ошибки
д.б.
cout<<"Номер - "<< x <<endl; вместо
cout>> "Номер - ">> x >>endl; и
cout<<"Среднее фрифметическое = "<< sum / count ; вместо
cout>> "Среднее фрифметическое = ">> sum / count ;

и еще пропустила увеличение Сч на 1
{
min = Sqr(a(i));
x = i;
sum = sum + a[i];
count++;
}
Неприятности приходят и уходят, а жизнь продолжается!
Sweta вне форума Ответить с цитированием
Старый 29.05.2008, 13:32   #9
conqueror
Пользователь
 
Регистрация: 15.01.2008
Сообщений: 31
По умолчанию

кое что сделал, но дальше без понятия.

Код:
#include <stdio.h>
#include <conio.h>
#include <math.h>
#include <stdlib.h>

void main ()
{
int a[40];
int i=0;
int min=1e1;
float Otel;
clrscr
for (i=0; i<a; i++)
{
printf(Mass [%d]= ", i);
scanf("%d", &a[i]);
if (min>Sqr a[i]);
{
min=sqr (a[i]);
}
}
printf("\n min=%d\n", Min);
printf("...... - %d\n", mass[i]);
printf(".......\n");
for (i=0; i<=a; i++);
{
printf(Mass[%d]=%d", i, mass[i];
}
printf("\n");
getch();
}
Может кто знает что делать дальше?
conqueror вне форума Ответить с цитированием
Старый 29.05.2008, 14:01   #10
B_N
Новичок
Джуниор
 
Регистрация: 18.01.2008
Сообщений: 1,720
По умолчанию

Код:
#include <stdio.h>
#include <math.h>
#include <time.h>
#include <float.h>
#include <stdlib.h>

#define N 40
#define UPPERBOUND 1000

int main()
{
	int i;
	int vect[N];
	int min_idx = -1;
	double min_sqrt = DBL_MAX;
	double tmp;

	srand(time(NULL));
	for (i = 0; i < N; vect[i ++] = (UPPERBOUND / 2) - (rand() % UPPERBOUND) );

	for(i = 0; i < N; i ++) {
		if(vect[i] > 0) {
			tmp = sqrt((double)vect[i]);
			if(tmp < min_sqrt) {
				min_idx = i;
				min_sqrt = tmp;
			}
		}
	}

	for(i = 0; i < N; i ++) {
		printf("vect[%02d] = %5d", i, vect[i]);
		if(i == min_idx){
			printf("\t<-- smallest square root (%.5f)", min_sqrt);
		}
		printf("\n");
	}

	getchar();
	return 0;
}
B_N вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Задача. Массив. ViNcHeStEr Помощь студентам 2 15.06.2008 15:17
Задача на массив Юрии Александрович Паскаль, Turbo Pascal, PascalABC.NET 5 08.12.2007 15:32
Задача на массив. ErMaKiim Помощь студентам 2 29.11.2007 19:42
задача на массив строк hijack Помощь студентам 0 26.11.2007 23:10
Задача на одномерный массив AliVe Помощь студентам 1 19.11.2007 21:35