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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 09.11.2019, 10:29   #1
Enotik_1998
Пользователь
 
Регистрация: 09.03.2018
Сообщений: 77
По умолчанию Работа с массивами в С

Здравствуйте. Нужна помощь с заданием:
Дан вектор размерности N. Если элементы, расположенные за минимальным, упорядочены в порядке убывания, то найти сумму элементов, расположенных до минимального, и разделить его на максимальный.
Я сделал ввод-вывод массива и нашёл минимальный и максимальный элементы. Как сделать всё остальное?
Вот мой исходный код:
Код:
#include <stdio.h>
#include <math.h>
#include <conio.h>
#include <stdlib.h>
main()
{
int a[10];
int i, n, min, max;
printf("Vvedite razmer vectora n=");
scanf("%d",&n);
for (i=0; i<n; i++) 
{
	printf("a[%d]=",i);
	scanf("%d", &a[i]);
}
min = a[0];
for (i = 0; i < n; i++)
if (min > a[i])
		min = a[i];
printf("\n Min element = %d", min);
max = a[0];
for (i = 0; i < n; i++)
if (max < a[i])
		max = a[i];
printf("\n Max element = %d \n", max);
for (i=0; i<n; i++)
	printf("%2d", a[i]);

}
Enotik_1998 вне форума Ответить с цитированием
Старый 09.11.2019, 10:39   #2
digitalis
Старожил
 
Аватар для digitalis
 
Регистрация: 04.02.2011
Сообщений: 4,546
По умолчанию

Не влезая слишком глубоко:
1. Если min = a[0]; то цикл надо начинать с for (i = 1; ... Это не ошибка, но лишняя работа.
2. Для дальнейших телодвижений после поисков макс. мин. нужно определять не только сам минимум, но и его позицию в массиве - отсюда будет раскручиваться вторая часть.
digitalis вне форума Ответить с цитированием
Старый 09.11.2019, 11:32   #3
Enotik_1998
Пользователь
 
Регистрация: 09.03.2018
Сообщений: 77
По умолчанию

Вот я сделал нахождение индексов минимального и максимального элементов в массиве. Вот только индекс максимального элемента он считает неправильно, туда всегда записывается 5:
Код:
#include <stdio.h>
#include <math.h>
#include <conio.h>
#include <stdlib.h>
main()
{
int a[10];
int i, j, n, min, max, ind1, ind2;
printf("Vvedite razmer vectora n=");
scanf("%d",&n);
for (i=0; i<n; i++) 
{
	printf("a[%d]=",i);
	scanf("%d", &a[i]);
}
min = a[0];
for (i = 1; i < n; i++)
if (min > a[i])
	{
		min = a[i];
		ind1=i;	
	}
printf("\n Min element = %d", min);
printf("\n Index min elementa = %d \n", ind1);
max = a[0];
for (i = 1; i < n; i++)
if (max < a[i])
		max = a[i];
		ind2=i;	
printf("\n Max element = %d", max);
printf("\n Index max elementa = %d \n", ind2);
for (i=0; i<n; i++)
	printf("%2d", a[i]);

}

Последний раз редактировалось Enotik_1998; 09.11.2019 в 11:44.
Enotik_1998 вне форума Ответить с цитированием
Старый 09.11.2019, 11:46   #4
digitalis
Старожил
 
Аватар для digitalis
 
Регистрация: 04.02.2011
Сообщений: 4,546
По умолчанию

Как раз индекс максимального и не требуется, только его значение. А чтоб правильно он определялся для минимума , нужно
Код:
min = a[0];
ind1 = 0 ;
for (i = 1; i < n; i++)
А поскольку начальное значение не задано, а сравнение ни разу не сработало - в ind м.б. х.з. что.
К слову: поиск мин. и макс. можно ( и нужно ) делать в одном и том же цикле, это - практика хорошего программирования .
Тогда оба if нужно взять в операторные скобки {} - ну это и козе понятно.
В Мурлындии это делают приблизно так:
Код:
min = a[0];
ind1 = 0 ;
max = min;
for (i = 1; i < n; i++)
  {
     if (min > a[i])
	{
		min = a[i];
		ind1=i;	
	}
    if (max < a[i]) max = a[i];
  }

Последний раз редактировалось digitalis; 09.11.2019 в 11:58.
digitalis вне форума Ответить с цитированием
Старый 09.11.2019, 11:58   #5
Enotik_1998
Пользователь
 
Регистрация: 09.03.2018
Сообщений: 77
По умолчанию

Ладно, индекс минимального элемента у меня считает правильно. Что дальше делать?
Enotik_1998 вне форума Ответить с цитированием
Старый 09.11.2019, 12:05   #6
digitalis
Старожил
 
Аватар для digitalis
 
Регистрация: 04.02.2011
Сообщений: 4,546
По умолчанию

Бляха-муха.... Что делать? Читать условие задачи: если все элементы, что за минимальным, каждый последующий меньше предыдущего, то...
Я что, задание должен пересказывать?
digitalis вне форума Ответить с цитированием
Старый 09.11.2019, 12:10   #7
Enotik_1998
Пользователь
 
Регистрация: 09.03.2018
Сообщений: 77
По умолчанию

я знаю задание, подскажите мне, как это реализовать в с, я про это
Enotik_1998 вне форума Ответить с цитированием
Старый 09.11.2019, 12:18   #8
p51x
Старожил
 
Регистрация: 15.02.2010
Сообщений: 15,707
По умолчанию

Код:
цикл с номера минимального до конца
  если элементы не упорядочены, то флаг = 1

если флаг = 0, то
  цикл с начала до минимального сумма = сумма + элемент
  сумма / максимальный
p51x вне форума Ответить с цитированием
Старый 09.11.2019, 12:29   #9
Enotik_1998
Пользователь
 
Регистрация: 09.03.2018
Сообщений: 77
По умолчанию

p51x, можете, пожалуйста, написать код по этому на с? А то я просто дурачок и не понимаю, как это сделать
Enotik_1998 вне форума Ответить с цитированием
Старый 09.11.2019, 12:37   #10
p51x
Старожил
 
Регистрация: 15.02.2010
Сообщений: 15,707
По умолчанию

Так я вам неаписал. Замените на соответствующие операторы и вперд.
p51x вне форума Ответить с цитированием
Ответ


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

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Работа с массивами. Си Sting95 Помощь студентам 5 28.04.2014 02:16
Работа с массивами. BaRSyk174 Помощь студентам 0 27.12.2010 23:03
работа с массивами Sparky Win Api 2 24.02.2010 19:02
Работа с массивами. DomiR Помощь студентам 1 22.05.2009 12:09