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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 10.01.2013, 17:37   #1
ShustrbIy
 
Регистрация: 04.01.2013
Сообщений: 4
По умолчанию Массив (язык СИ)

Ребят,помогите пожалуйста. Завтра зачет (
задача на массив.
из 3х условий.
1)Найти по модулю минимальный элемент массива.
2)Найти сумму элементов массива после первого элемента равного 0.
3)Преобразовать массив так чтобы в первый его половине располагались элементы,стоявшие в четных позициях,а во второй половине -элементы, стоявшие в нечетных позициях.

Первое условие я сделал, второе условие сделано ,но:
1) Если в массиве нет нуля, прога ломается (не знаю как сделать проверку на ноль. нужно что то ти по: если нуля нет,то ОШИБКА- в массиве нуля нет и вывод на экран сообщение в котором говорится, что ноль не обнаружен,при этом минимальный элемент по модулю тоже должен быть на экране)
2)Не получается сделать ,так что бы сумму по модулю после нуля ,программа начала считать с ПЕРВОГО нуля , а не с последнего ,как у меня. а то когда один ноль в программе она работает правильно,когда задаю большой массив сумма идет с последнего нуля..)
3)Не знаю как сделать 3й пункт.. помогайте плиз (

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

int main()
{
	int *A=NULL;
	int N,  min=100, i, index;
	signed long int sum=0;
	srand(time(NULL));
	do 
	{
		printf("\n Vvedite dlinu massiva N: ");
		scanf("%d", &N); 
	} while (N<1);
	A=new int[N];
	for (i=0;i<N;i++)
	{
		A[i]=rand()%50-25;
	}
	for (i=0; i<N; i++)
	{
		printf("%d\n", A[i]);
		   if (labs(A[i]) < min)
		   {
			   min = labs(A[i]);
		   } 
		   if (A[i]==0)
		   {
			   index=i;
		   }
	}
	for (i=index; i<N; i++)
	{
		sum+=labs(A[i]);
	}
	delete []A;

	printf("\n Min element po mod=%d\n",min);
	printf("\n Sum chisel po mod posle nulya=%d", sum);
	getch();
	return 0;
}
ShustrbIy вне форума Ответить с цитированием
Старый 10.01.2013, 18:19   #2
Abstraction
Старожил
 
Аватар для Abstraction
 
Регистрация: 25.10.2011
Сообщений: 3,178
По умолчанию

По Вашим вопросам:
1) На выходе из цикла поиска нуля можно проверить значение переменной index. Если оно равно тому же, что и при объявлении (и, разумеется, при объявлении ей присвоено число, которое не может быть индексом - скажем, -1), значит, нуля мы так и не нашли.
2) Изучите, что делает ключевое слово break. Это решит Вашу проблему.
3) Если нет требования сохранять порядок элементов на нечётных позициях (и если элемент с индексом 0 считается имеющим "чётную" позицию), то так (попытайтесь сначала проделать это на бумаге для лучшего понимания): берём два "курсора"-индекса. Первый равен 1, второй 2. Пока второй не вышел за пределы массива, меняем местами элементы по первому индексу и по второму, затем увеличиваем первый индекс на 1, второй на 2.
Abstraction вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Дан массив чисел В[0:N]. Записать подряд в массив А элементы массива В, имеющие четные индексы,(язык си++) yury.zanilov Помощь студентам 9 15.03.2012 21:55
Дан массив из N целых чисел. Получить из него массив чисел по модулю меньших 10 и отсортировать его(язык си++) mitja-zakelidis Помощь студентам 2 15.03.2012 03:10
Массив - Нужно написать массив и распечатать на экран с конца в начало(язык С++) econ Помощь студентам 1 29.05.2011 22:02