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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 17.11.2013, 13:58   #1
pyrozhok
Пользователь
 
Регистрация: 13.10.2013
Сообщений: 10
По умолчанию Обработка одномерных массивов (С++)

Нужна помощь по заданию:
Дан вещественный массив А[N] и натуральное число k. Если количе-ство положительных элементов в массиве А больше k, то сдвинуть цикличе-ски все элементы массива на одну позицию вправо, в противном случае – на одну позицию влево.

Код работает неправильно
Код:
#include <iostream>
#include <conio.h>
#include <stdlib.h>
#include <time.h>
#define N 100
using namespace std;
void main()
{
	setlocale(LC_ALL,"rus");
float A[N],M[N];
int i,k;
k=42;
srand((unsigned)time(0));
//Присваиваем массиву случайные элементы в промежутке [-50;50]
for (i=0;i<N;i++)
	{A[i]=rand()%101-50;}
for(i=0;i<N;i++)
{cout<<A[i]<<" ";}
cout<<"\n \n";
for (i=1;i<N;i++)
	{	if (A[i]>=0&&A[i]<k)
			{M[i]=A[i-1];}
			M[0]=A[i-1];

	if	(A[i]>=0&&A[i]>k)
		{M[i]=A[i+1];}
			M[0]=A[i+1];
}
for(i=0;i<N;i++)
{cout<<A[i]<<" ";}
getch();
}
pyrozhok вне форума Ответить с цитированием
Старый 17.11.2013, 14:26   #2
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

А что именно не работает?
Вообще я бы сдвиги в функции определил:
Код:
void ror(){ //Вправо
 float aN=a[N-1];
 for(int i=n-1;i>=0;i--) a[i+1]=a[i];
 a[0]=aN;
}
void ror(){ //Влево
 float aN=a[0];
 for(int i=1;i<N;i++) a[i-1]=a[i];
 a[N-1]=aN;
}
И уже их использовал.
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 17.11.2013, 15:38   #3
pyrozhok
Пользователь
 
Регистрация: 13.10.2013
Сообщений: 10
По умолчанию

Цитата:
Сообщение от Stilet Посмотреть сообщение
А что именно не работает?
Не делает сдвиги, выводит одинаковые элементы.
pyrozhok вне форума Ответить с цитированием
Старый 18.11.2013, 19:42   #4
pyrozhok
Пользователь
 
Регистрация: 13.10.2013
Сообщений: 10
По умолчанию

Исправил, теперь все работает
Код:
#include <iostream>
#include <conio.h>
#include <stdlib.h>
#include <time.h>
#define N 5
using namespace std;
void main()
{
	setlocale(LC_ALL,"rus");
int A[N],M[N];
int i,k,s;
cout<<"Введите k:";
cin>>k;
cout<<"\n \n";
srand((unsigned)time(0));
//Присваиваем массиву случайные элементы
for (i=0;i<N;i++)
	{A[i]=rand()%101-50;}
//Вывод A[i]
cout<<"Массив A[i] имеет следующие значения:\n";
for(i=0;i<N;i++)
{cout<<A[i]<<" ";}
cout<<"\n \n";
//Счет количества положительных элементов массива A[i]
s=0;
for (i=0;i<N;i++)
{
if (A[i]>0)
{s=s+1;}
}
cout<<"Количество положительных элементов в массиве равно "<<s<<"\n \n";
//Условие сдвига
for (int i = 0; i < N; i++){ 
	M[i] = A[i];
}
if (s > k){	//Вправо
	for (i=0;i<=N-1;i++){
		M[i]=A[i-1];
	}
	M[0]=A[N-1];
}
else {	//Влево
	for (int i = 1; i < N; i++){
		M[i-1] = A[i];
	}
	M[N-1] = A[0];
}
cout<<"Элементы массива после сравнения с числом k \n \n";
for(i=0;i<N;i++)
{cout<<M[i]<<" ";}
getch();
}
pyrozhok вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Обработка одномерных массивов lolwto Помощь студентам 0 05.12.2012 15:55
Обработка одномерных массивов. vasya9 Помощь студентам 0 13.11.2011 21:08
Обработка одномерных массивов Mari.Prosto Mari Паскаль, Turbo Pascal, PascalABC.NET 7 09.06.2010 22:04
обработка одномерных массивов felmor Помощь студентам 16 05.02.2009 19:22