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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 08.11.2021, 22:10   #1
martel-
 
Регистрация: 08.11.2021
Сообщений: 6
Печаль C, элементы массива между наименьшим и наибольшим заменить их полусуммой

Дан одномерный массив Х, состоящий из 15 элементов. Определить полусумму
наибольшего и малейшего элементов массива. Все элементы, которые находятся между ними
заменить этой половиной суммой. Вывести на печать заданный и новообразованный массивы

Буду благодарен!

язык С, застрял не могу продолжить

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

int main()
{   srand(time(NULL));
int dim;
dim = 15;
int i,X[dim];
for(int i=0; i<15;i++){
        if(min>X[i]){
            min=X[i];
        }
      else  if(max<X[i]){
            max=X[i];
        }    
    }

Последний раз редактировалось BDA; 09.11.2021 в 00:55.
martel- вне форума Ответить с цитированием
Старый 08.11.2021, 23:36   #2
ViktorR
Старожил
 
Регистрация: 23.10.2010
Сообщений: 2,381
По умолчанию

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

2. Переменные min и max тоже надо описывать.
Для поиска минимального и максимального значений инициализируй их первым элементом массива так:
Код:
min = X[0]; max = X[0];
for(int i=1; i<15;i++){   // Массив просматриваешь с первого элемента в цикле
   if (min > X[i]) {
      min=X[i];
   }
   if (max<X[i]) {   // Этот оператор не связан с первым - без else
      max=X[i];
   }
}
3. Выводишь результат (min + max) / 2;
Как-то так, ...
ViktorR вне форума Ответить с цитированием
Старый 09.11.2021, 12:17   #3
martel-
 
Регистрация: 08.11.2021
Сообщений: 6
По умолчанию

ViktorR, Как вывести этот результат? Я очень сильно застрял, помогите закончить его пожалуйста, вот мой код.
Код:
#include <stdio.h>
#include <stdlib.h>
#include <math.h>
#include <time.h>

int main()
{   srand(time(NULL));
    int dim, min, max;
    dim = 1+rand()%15;
    int i,X[dim];
    for(i=0;i<dim;i++){
        X[i]=30-rand()%60;
        printf("X[%i] = %i\n",i,X[i]);
    }
    min = X[0]; max = X[15];
for(int i=1; i<15;i++){   
   if (min > X[i]) {
      min=X[i];
   }
   if (max<X[i]) {   
      max=X[i];
   }
}

Последний раз редактировалось BDA; 09.11.2021 в 14:37.
martel- вне форума Ответить с цитированием
Старый 09.11.2021, 12:47   #4
Aleksandr H.
2 the Nation Glory
Старожил
 
Аватар для Aleksandr H.
 
Регистрация: 27.05.2014
Сообщений: 3,289
По умолчанию

Код:
printf("%f=",(min + max) / 2);
Кто умер, но не забыт, тот бессмертен.
Лао-Цзы.
Aleksandr H. вне форума Ответить с цитированием
Старый 09.11.2021, 13:00   #5
martel-
 
Регистрация: 08.11.2021
Сообщений: 6
По умолчанию

Где ошибка, как закончить?
Код:
#include <stdio.h>
#include <stdlib.h>
#include <math.h>
#include <time.h>

int main()
{   srand(time(NULL));
    int dim, min, max;
    dim = 1+rand()%15;
    int i,X[dim];
    for(i=0;i<dim;i++){
        X[i]=30-rand()%60;
        printf("X[%i] = %i\n",i,X[i]);
    }
    min = X[0]; max = X[15];
for(int i=1; i<15;i++){   
   if (min > X[i]) {
      min=X[i];
   }
   if (max<X[i]) {   
      max=X[i];
   }
   printf("%d=",(min + max) / 2);
   return 0;
}
}

Последний раз редактировалось BDA; 09.11.2021 в 14:37.
martel- вне форума Ответить с цитированием
Старый 09.11.2021, 14:15   #6
ForenLi
Форумчанин
 
Регистрация: 02.06.2021
Сообщений: 515
По умолчанию

Вы вставили
Код:
printf("%d=",(min + max) / 2);
return 0;
внутрь цикла.
ForenLi вне форума Ответить с цитированием
Старый 09.11.2021, 14:47   #7
BDA
МегаМодератор
СуперМодератор
 
Аватар для BDA
 
Регистрация: 09.11.2010
Сообщений: 7,431
По умолчанию

Не создавайте новые темы для обсуждения одной задачи. Используйте кнопку CODE для оформления кода. Вы делаете dim случайным числом от 1 до 15, хотя по условию массив фиксированной длины. Вы инициализируете max 15ым элементом массива, но это неверно по 3 причинам: при максимальном размере массива в 15 элементов, последний элемент имеет номер 14; размер массива случаен и может быть меньше 15; если максимум располагался в нулевом элементе, то код не найдет его. Цикл поиска максимума и минимума не учитывает, что длина массива может быть отлична от 15. Исходя из необходимости замены элементов между минимумом и максимумом, лучше искать их индексы в массиве, а не сами максимум и минимум.
Пишите язык программирования - это форум программистов, а не экстрасенсов. (<= это подпись )
BDA вне форума Ответить с цитированием
Старый 20.11.2021, 17:56   #8
martel-
 
Регистрация: 08.11.2021
Сообщений: 6
Печаль Помогите найти ошибку в массиве, С

Задача:
Дан одномерный массив Х, состоящий из 15 элементов. Определить полусумму
наибольшего и малейшего элементов массива. Все элементы, которые находятся между ними
заменить этой половиной суммой. Вывести на печать заданный и новообразованный массивы

Код:
#include <stdio.h>
#include <stdlib.h>
#include <math.h>
#include <time.h>
 
int main() {
	srand(time(NULL));
	int dim = 15;
	int min, max, X[dim], newArray[dim]; 
 
	for(int i = 0; i < 15; i++) {
		if (min > X[i]) {
			min = X[i];
		} else if (max < X[i]) {
			max = X[i];
		}
	}
 
	for (int i = 0; i < 15; i++) {
		if (i == 0) {
			newArray[i] = min;
		} else if (i == 14) {
			newArray[i] = max;
		} else {
			newArray[i] = (max + min) / 2;
		}
 
	}
 
	printf("min - %d, ", min);
	printf("max - %d\n\n\n", max);
 
	for (int i = 0; i < 15; i++) {
		printf("1 - %d; ", X[i]);
		printf("2 - %d \n", newArray[i]);
	}
}
Помогите исправить ошибку
martel- вне форума Ответить с цитированием
Старый 20.11.2021, 19:57   #9
BDA
МегаМодератор
СуперМодератор
 
Аватар для BDA
 
Регистрация: 09.11.2010
Сообщений: 7,431
По умолчанию

Не создавайте новые темы для обсуждения одной и той же задачи. Что-то вы потеряли кучу полезного кода: инициализацию массива X, переменных min и max. Цикл вывода массивов: мне кажется, нагляднее вывести массив один под другим. Ну и остается проблема, что нужно все-таки хранить индексы максимума и минимума, а текущий способ заполнения newArray плохо соотносится с условием задачи. А вот когда будете хранить сами индексы, то будет легко заменить кусочек массива:
Код:
for (int i = min(min_ind, max_ind) + 1; i < max(min_ind, max_ind); i++) {
    newArray[i] = s;
}
Пишите язык программирования - это форум программистов, а не экстрасенсов. (<= это подпись )

Последний раз редактировалось BDA; 20.11.2021 в 20:07.
BDA вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Переставить в обратном порядке элементы массива, расположенные между элементами AK и AL, включая эти элементы. incl_02 Паскаль, Turbo Pascal, PascalABC.NET 2 02.03.2020 02:37
Дан массив размера N. Обнулить элементы массива, расположенные между его минимальным и максимальным элементами (не включая минимальный и максимальный элементы) Churly Помощь студентам 4 01.03.2019 19:21
В матрице поменять строки с наибольшим и наименьшим элементом. Элементы найдены, строки тоже: quadrolol Общие вопросы C/C++ 2 24.09.2017 14:54
списке целых чисел все элементы между max и min заменить полусуммой max и min Roman one C/C++ Базы данных 0 20.12.2012 12:14
Дан массив X(N).Найти среднеквадратичное всех элементов массива и заменить этим значение нулевые элементы массива. sev48fire Паскаль, Turbo Pascal, PascalABC.NET 3 21.06.2012 23:44