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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 17.02.2013, 15:49   #1
Misha_Sil
 
Регистрация: 16.02.2013
Сообщений: 8
По умолчанию Сумму элементов массива, расположенных после последнего элемента, равного нулю

Написать пользовательскую функцию, решающую указанную ниже задачу. Массив создается в динамической области памяти функцией new. При обращении к элементам массива воспользоваться взаимосвязью массивов с указателями (косвенная адресация). Предусмотреть реакцию программы на ситуации, при которых задача не имеет решения.


В одномерном массиве, состоящем из n вводимых с клавиатуры элементов, вычислить:
Сумму элементов массива, расположенных после последнего элемента, равного нулю.

Подскажите пожалуйста, что не так в моем коде

Код:
#include <conio.h>
#include <stdio.h>
#include <stdlib.h>
#include <locale.h>
#include <math.h>
double ss(double,int);

double ss(double *m,int k){
		     // Подсчет суммы элементов после последнего элемента, равного нулю
    	int n_0=0; double summa=0;
     
	 for (int i=1; i<k; i++) 
         if ((*(m+i)==0) && ((*m)==0))
         n_0=i;                                                                
	 	 if (n_0==k) 
				  printf("\n равный нулю элемент последний.\n");
			  
			  else
         {
             for (int i=n_0-1; i>=0 && (m[i] != 0); i--) 
				 summa+=m[i];
     }
     return summa;
}

//====================================================================
void main(){
	setlocale(LC_CTYPE,"russian"); 
	system("cls");
     fflush(stdin);	
	double *A;
	int n, j=0;
	double sum=0, min=0;
	
//==========================================================================	
	printf("\n Введите размер массива А \n");
	scanf_s("%d", &n);
	for (;n==0 || n<0 || n==1;) 
	{
		puts("Размер массива должен быть больше 1!");
		scanf_s("%d", &n);
	}
		A = new double [n] ;
    if (!A)    
		{  
	printf("Out of memory. Press any key: "); 
	_getch();
		exit(1);
	}
	printf("\n Введите элементы массива А\n ", n);
		for ( int i = 0; i < n; i ++) {
				printf(" Элемент %d=", i+1); scanf_s("%lf",  A+i);	
		}
//======================================================================			
    		for (int i=1; i<n; i++) 
				  if ((A[i])==(A[0])){
		 j++;
		 if (j != 0) {
		     printf("В массиве нет элементов равных нулю! ");
	_getch();
	exit(0);
		 };}
	    if (j==0)	
      		   printf("\n Сумма элементов массива %4.2lf\n", ss(A,n));
   delete[]A;
   _getch();
 }


___________
Код нужно оформлять по правилам:
тегом [CODE]..[/СODE] (это кнопочка с решёточкой #)
Не забывайте об этом!
Модератор.

Последний раз редактировалось Serge_Bliznykov; 18.02.2013 в 09:59.
Misha_Sil вне форума Ответить с цитированием
Старый 18.02.2013, 11:54   #2
tmtm
Пользователь
 
Регистрация: 12.05.2012
Сообщений: 20
По умолчанию

Восемнадцать ошибок выдает компилятор. Такое ощущение, что программа написана на Си, но выделение-освобождение памяти как в С++.
Сразу бросается в глаза:
Код:
double ss(double,int);
Нужно так:
Код:
double ss(double*,int);
Ну и функция у вас с ошибками реализована.
tmtm вне форума Ответить с цитированием
Старый 18.02.2013, 15:52   #3
Misha_Sil
 
Регистрация: 16.02.2013
Сообщений: 8
По умолчанию

Почему-то у меня кампилятор ни одной ошибки не выдает

Напишите пожалуйста как правильно. я не знаю как и что исправить

Последний раз редактировалось Stilet; 18.02.2013 в 17:55.
Misha_Sil вне форума Ответить с цитированием
Старый 18.02.2013, 15:56   #4
Базиля
Участник клуба
 
Аватар для Базиля
 
Регистрация: 03.12.2009
Сообщений: 1,013
По умолчанию

В чем тогда проблема?
Базиля вне форума Ответить с цитированием
Старый 18.02.2013, 19:16   #5
Bugrimov
C/C++, Java
Участник клуба
 
Аватар для Bugrimov
 
Регистрация: 28.03.2012
Сообщений: 1,680
По умолчанию

На мой взгляд память нужно выделять функцией malloc(), а освобождать free(). Это некоторые функции для работы с динамической памятью в Си.
Кстати еще вопрос, а зачем подключать файл math.h - вроде нет в коде математических функций???
"Keep it simple" - придерживайтесь простоты!
Уильям Оккам - "Не следует множить сущее без необходимости"
Сложность - враг простоты и удобства!

Последний раз редактировалось Bugrimov; 18.02.2013 в 20:40.
Bugrimov вне форума Ответить с цитированием
Старый 18.02.2013, 20:54   #6
Misha_Sil
 
Регистрация: 16.02.2013
Сообщений: 8
По умолчанию

а почему new не подходит?
Misha_Sil вне форума Ответить с цитированием
Старый 18.02.2013, 21:01   #7
Bugrimov
C/C++, Java
Участник клуба
 
Аватар для Bugrimov
 
Регистрация: 28.03.2012
Сообщений: 1,680
По умолчанию

new всем хорош , но для динамического выделения памяти в программах написанных на Си используются функции malloc(), calloc(). Ключевое слово new, согласно стандарта используется в C++.
Если вы пишете на C++, то конечно, непременно - new

Код:
A = (double*)malloc(sizeof(double) * n);
n - размер массива.
Думаю что-то вроде этого должно быть.

Код:
printf("\n Введите элементы массива А\n ", n);
Вот еще кстати, переменная n после вывода строки не нужна.
Вы же ни где не подставляете ее значение в строке (нет %d)
"Keep it simple" - придерживайтесь простоты!
Уильям Оккам - "Не следует множить сущее без необходимости"
Сложность - враг простоты и удобства!

Последний раз редактировалось Stilet; 18.02.2013 в 21:13.
Bugrimov вне форума Ответить с цитированием
Ответ


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

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

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


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Найти сумму элементов расположенных ,после первого элемента равному нулю геннадий 2012 Visual C++ 13 26.12.2012 18:18
найти сумму элементов массива,расположенных между первым и вторым отрицательными элементами Кристюша5 Паскаль, Turbo Pascal, PascalABC.NET 0 26.05.2012 16:06
Найти сумму модулей элемента массива, расположенных после первого отрицательного ? МоЗгАвеД Общие вопросы C/C++ 0 12.12.2011 17:36
В матрице в каждой строке найти сумму N Элементов расположенных после максимального элемента этой строки lexflax Паскаль, Turbo Pascal, PascalABC.NET 0 20.04.2011 14:41
сумму элементов массива, расположенных после последнего элемента, равного нулю. R@Ziel Помощь студентам 2 17.12.2009 23:44