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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 23.11.2022, 23:51   #1
Dangerka
Новичок
Джуниор
 
Регистрация: 23.11.2022
Сообщений: 1
По умолчанию Задачка на массив.

Назовем x-отрезком группу подряд идущих элементов массива, каждый из которых равен x. Для заданного числа x заменить элементы каждого x-отрезка на
полусумму элементов, прилегающих к этому отрезку справа и слева. Если x-отрезок
расположен в начале или конце массива, считать недостающий крайний элемент равным нулю.

Программа считывает из файла (10
2 3 1 1 1 33 32 1 2 3)
количество элементов и элементы массива, если я правильно понял Х мы берем какой то произвольный, я взял 1. Прога компилируется и выдает все элементы массива кроме всех единиц, хотя по, хотя должна заменить три единицы на 18 и все, помогите, пожалуйста)

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

int main(void) {
	FILE*file = fopen("ddd.txt","r");
	double * arr;
	int n, i, dlina_min;
	double y, x, left, right;
	if (file == NULL)
	{
		printf("faila net\n");
		return 1;
	}
	if (fscanf(file, "%d", &n) != 1){
		      printf ("oshubka pri chtenii razmera\n");
		      fclose(file);
		      return 2;
	}		      
	
	arr = (double *) malloc (n * sizeof (int));
	if (arr == NULL) {
		printf("oshibka pri videlenii pamiati\n");
		fclose (file);
		return 3;
		}	
	for (i = 0; i < n; i++){
		if (fscanf(file, "%lf", & arr[i])!=1) {
			printf("file musor\n");
			free (arr);
			fclose(file);
			return 4;
			}
	}

	x = 1;
	for  (i = 0; i < n; i++) {
		dlina_min = 0;
		while ((arr[i] <= x) && (arr[i] >= x)) {
			i++;
			dlina_min++;
		}

		if (dlina_min > 1){
			if ( i - dlina_min == 0){
				left = 0;
			}
		
			else { 
				left = arr[i - dlina_min - 1];
			}
			if (i == n) 
				right = 0;
			else { 
				right = arr[i];
			}
		 
			y = (left + right)/2;

			for (int k=0; k < dlina_min; k++){
				arr[i - k - 1] = y;
			}	
		
		 }
		 printf ("%f\n", arr[i]);
	}
	free (arr);             
        fclose(file);
        return 0;
}
Dangerka вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
задачка на двумерный массив Дмитрий Н. Общие вопросы C/C++ 0 18.10.2009 11:42
Задачка на массив С/С++ Nina+ Помощь студентам 4 26.02.2009 17:36
Задачка на массив! soldm Паскаль, Turbo Pascal, PascalABC.NET 7 21.09.2008 20:18
Задачка на одномерный массив RECREATOR Помощь студентам 1 18.12.2007 08:01