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

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

Вернуться   Форум программистов > C/C++ программирование > Общие вопросы C/C++
Регистрация

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 23.12.2009, 16:16   #1
HixoH
Пользователь
 
Аватар для HixoH
 
Регистрация: 25.11.2009
Сообщений: 15
По умолчанию Работа с массивами

В одномерном массиве, состоящем из n целых элементов, вычислить:
1) минимальный по модулю элемент массива;
2) сумму модулей элементов массива, расположенных после первого элемента, равного 0.
3)Преобразовать массив таким образом, чтобы в первой его половине располагались все элементы, стоявшие в четных позициях, а во второй половине – элементы, стоявшие в нечетных позициях.
Код:
#include <stdafx.h>
#include <conio.h>

void main ()
{   int a[999];
    int n,s;
	printf("   ----Zadanie 1----\n");
    printf("vvedite razmer_");
	scanf("%i", &n);
    
	
	printf("vvedite perviy element_");
	scanf("%i",&a[0]);
	if(a[0]<0) a[0]=a[0]*-1;
	   for(int i=1; i<n; i++){
		printf("Vvedite ostal'nie elementi massiva_");
	    scanf("%i",&a[i]);
	if(a[i]<0) a[i]=a[i]*-1;
    if (a[i]<=a[0]) a[0]=a[i];}	
		printf("minimalniy element=%i",a[0]);//задание 1
		
		s=0;
	  printf("\n   -----Zadanie 2-----\n");
      printf("vvedite razmer_");
	  scanf("%i", &n);
		   a[0]=0;
		printf("Vvedite elementi massiva_%i\n",a[0]);
	for(int j=1; j<n; j++){
		printf("Vvedite elementi massiva_");
	    scanf("%i",&a[j]);
		if(a[j]<0) {a[j]=a[j]*-1;}}
	for(int j=1; j<n; j++){
		s=s+a[j];}		
		printf("\nsumma=%i", s);//задание 2
Вот до сюда нормально а дальше надо(Преобразовать массив 
таким образом, 
чтобы в первой его половине располагались все элементы, 
стоявшие в четных позициях, а во второй половине – элементы, 
стоявшие в нечетных позициях.
)
 printf("\n   -----Zadanie 3-----\n");
      printf("vvedite razmer_");
	  scanf("%i", &n);
	  for(int i=0; i<n; i++){
		printf("Vvedite elementi massiva_");
		scanf("%i",&a[i]);
			  	  }
	  for(int i=0; i<n/2; i++){
	  if((i%2)==0) a[i]=a[i];
	  else a[i]=0; }
				  
	  for(int i; i<n; i++) {if((i%2)==0) a[i]=0;}
	  for(int i=0; i<n; i++){
	  if(a[i]!=0)
		  printf(" %i", a[i]);}
				
		getch();
}
Вроде запускается но при вводе массива вылазит ошибка.
Подскажите что неправильно.
HixoH вне форума Ответить с цитированием
Старый 23.12.2009, 18:51   #2
atenon
Форумчанин
 
Регистрация: 05.12.2009
Сообщений: 253
По умолчанию

Честно говоря логику кода не понял. a[i]=a[i] зачем?
Если счтитать 0 четным номером то так:
Код:
// Добовляем еще два массива для записи четных и нечетных элементов	
	int het[999], nehet[999];   	  
	for(int i=0; i<n; i++)
	// Условие проверяет если индекс четный то значение массива записывается в массив чет. "к" запоминает размерность четного массива
		if((i%2)==0) 
		{
			het[k]=a[i];k++;  
		}
		else // Если не четный индекс то в массив нечет. "r" запоминает размерность нечетного массива
		{
			nehet[r]=a[i]; r++;  
		}
	
	// Записываем в массив "а" сначала значения стоявшие на четных позициях 	 		
	for (i=0;i<n;i++)
		a[i]=het[i];
					
	// Затем элементы стоявшие на нечетных позициях
	for (i=0;i<n;i++)
		a[i+k]=nehet[i];
	// И выводим
Вообще лучше бы использовать динамические массивы.
Приходится бежать со всех ног, чтобы только остаться на том же месте! Если хочешь попасть в другое место, тогда нужно бежать по меньшей мере вдвое быстрее! Льюис Кэрол

Последний раз редактировалось atenon; 23.12.2009 в 20:18.
atenon вне форума Ответить с цитированием
Старый 24.12.2009, 10:37   #3
HixoH
Пользователь
 
Аватар для HixoH
 
Регистрация: 25.11.2009
Сообщений: 15
По умолчанию

А ясно В С Ё спасиб!

Последний раз редактировалось HixoH; 24.12.2009 в 10:54.
HixoH вне форума Ответить с цитированием
Старый 26.12.2009, 21:17   #4
atenon
Форумчанин
 
Регистрация: 05.12.2009
Сообщений: 253
По умолчанию

Цитата:
Сообщение от atenon Посмотреть сообщение
Честно говоря логику кода не понял. a[i]=a[i] зачем?
Если счтитать 0 четным номером то так:
Код:
// Добовляем еще два массива для записи четных и нечетных элементов	
	int het[999], nehet[999];   	  
	for(int i=0; i<n; i++)
	// Условие проверяет если индекс четный то значение массива записывается в массив чет. "к" запоминает размерность четного массива
		if((i%2)==0) 
		{
			het[k]=a[i];k++;  
		}
		else // Если не четный индекс то в массив нечет. "r" запоминает размерность нечетного массива
		{
			nehet[r]=a[i]; r++;  
		}
	
	// Записываем в массив "а" сначала значения стоявшие на четных позициях 	 		
	for (i=0;i<n;i++)
		a[i]=het[i];
					
	// Затем элементы стоявшие на нечетных позициях
	for (i=0;i<n;i++)
		a[i+k]=nehet[i];
	// И выводим
Вообще лучше бы использовать динамические массивы.
Периодически просматриваю коды которые написал, и с каждым разом удивляюсь (вот тормоз). Зачем r ? Вот это вообще пошло выглядит int het[999], nehet[999];. И на счет алгоритма тоже есть подозрения, думаю можно проще сделать .

Нет другого решения не нашел пока.... Кроме как организовать два цикла, один записывает четные элементы другой нечетные. Вопрос в том, что больше жрет ресурсы if или for?
Приходится бежать со всех ног, чтобы только остаться на том же месте! Если хочешь попасть в другое место, тогда нужно бежать по меньшей мере вдвое быстрее! Льюис Кэрол

Последний раз редактировалось atenon; 26.12.2009 в 21:39. Причина: if или for?
atenon вне форума Ответить с цитированием
Старый 18.04.2011, 19:19   #5
pashqa
Пользователь
 
Регистрация: 09.12.2010
Сообщений: 37
По умолчанию

Не могли бы вы помочь с этой задачей...переделать ее на Паскаль? буду очень признателен.
pashqa вне форума Ответить с цитированием
Старый 19.04.2011, 21:33   #6
Trust_357
Пользователь
 
Регистрация: 10.03.2011
Сообщений: 68
По умолчанию

Цитата:
Периодически просматриваю коды которые написал, и с каждым разом удивляюсь (вот тормоз). Зачем r ? Вот это вообще пошло выглядит int het[999], nehet[999];. И на счет алгоритма тоже есть подозрения, думаю можно проще сделать .
Код:
for(int k=0,i=0;k<(n+1)/2;k++,i+=2)
	{
		int t=mas[k];
		mas[k]=mas[i];
		mas[i]=t;
	}
Только во второй половине, где нечётные порядок будет перемешан
Trust_357 вне форума Ответить с цитированием
Старый 29.04.2011, 18:46   #7
Alexander1205
Пользователь
 
Аватар для Alexander1205
 
Регистрация: 22.01.2011
Сообщений: 78
По умолчанию

PHP код:
#include <iostream>
using namespace std;
void reversArray(int[], int);
void sum(int[],int);
void repetition(int[],int);
int minimum(int[],int);
int main()
{
    const 
int size=10;
    
int myArray[size]={1,2,2,4,4,3,6,7,6,6};
    
reversArray(myArray,size);//выводит массив наоборот
    
cout<<endl;
    
sum(myArray,size);//находит суммы
    
repetition(myArray,size);
    
cout<<endl;
    
cout<<"Min uneven number is: "<<minimum(myArray,size)<<endl;//выводит минимальное нечетное значение
}
/****************************************************************
//Написать программу, которая выводит содержимое массива наоборот.
*****************************************************************/
void reversArray(int Array[],int size)
{
    for(
int i=size;i>0;i--)
        
cout<<Array[i-1];
}
/**********************************************************************************
Написать программу, которая находит сумму четных и сумму нечетных элементов массива.
***********************************************************************************/
void sum(int Array[], int size)
{
    
int evenCounter=0;//счетчик для четных элементов
    
int unevenCounter=0;//счетчик для нечетных
    
for(int i=0;i<size;i++)
    {
        if(Array[
i]%2==0)
            
evenCounter+=Array[i];
        else
            
unevenCounter+=Array[i];
    }
    
cout<<"Sum of even numbers is: " <<evenCounter<<endl;
    
cout<<"Sum of uneven numbers is: "<<unevenCounter<<endl;
}
/**************************************************************************************************************
Написать программу, которая находит в массиве значения, повторяющиеся два и более раз, и показывает их на экран (ограничения: работает только если элементы массива <=1000)
****************************************************************************************************************/
void repetition(int Array[],int size)
{
   const 
int M=1000;
    
    
int numbers[M]={0};//массив для записи, какой элемент сколько раз встретится...
    
int counter 0;
 for(
int i=0;i<size;i++)                               // counter cycle
  
numbers[ Array[i] ]++;
 
cout<<"elements ";
 for(
int i=0;i<M;i++) // display results
 
{
  if(
numbers[i]>1)
    
cout<<i<<" ";
 }
}
/*****************************************************************************************************
Написать программу, которая находит в массиве самое маленькое нечетное число и показывает его на экран
*******************************************************************************************************/
int minimum(int Array[], int size)
{
    
int minimum=0;
    for(
int i=0;i<size;i++)
    {
        if(Array[
i]%2!=0)
            
minimum=Array[i];
        for(
i;i<size;i++)
        {
            if(Array[
i]<minimum&&Array[i]%2!=0)
                
minimum=Array[i];
        }

    }
    
cout<<"\n\n";
    return 
minimum;
    

Alexander1205 вне форума Ответить с цитированием
Старый 16.05.2011, 21:51   #8
neo7777777
Новичок
Джуниор
 
Регистрация: 16.05.2011
Сообщений: 2
По умолчанию

Можешь написать что ты исправил а то у меня почему то не запускается напиши пожалуйста очень надо Заранее благодарен
neo7777777 вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Работа с массивами SnowSin Помощь студентам 0 05.12.2009 14:08
Работа с массивами. DomiR Помощь студентам 4 22.05.2009 12:17
Работа с массивами. DomiR Помощь студентам 1 22.05.2009 12:09
Работа с массивами mchip Microsoft Office Excel 8 22.04.2009 11:46
Работа с массивами DeN1308 Помощь студентам 3 09.11.2007 11:50