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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 21.11.2009, 18:28   #1
cudalover
Пользователь
 
Регистрация: 05.11.2008
Сообщений: 34
По умолчанию Одномерный массив. Сортировка (C++)

Здравствуйте!

Пишу программу, для вычисления в одномерном массиве, состоящем из n целых элементов:

1) минимального элемента массива;
2) суммы элементов массива, расположенных между
первым и последним положительными элементами.
Также нужно преобразовать массив таким образом, чтобы сначала располагались все элементы, равные нулю, а потом - все остальные.


Вот последнее и не выходит. Например, если в массиве 2 нуля, первые 2 элемента при выводе заменяются нулями, а остальные просто сдвигаются.
Плюс еще ко всему после вывода массива вылазит "odnomassv.exe - обнаружена ошибка. Приложение будет закрыто. Приносим извинения за неудобства."

Пожалуйста, помогите отладить и покажите где косяки.

Листинг вот:
Код:
// odnomassv.cpp : Defines the entry point for the console application.
//

#include "stdafx.h"
#include <stdlib.h>
#include <iostream>
#include <iomanip>
#include <stdio.h>
#include <conio.h>
using namespace std;
int main() {	
const int n = 10;
int array[n],i, j, min, s=0, numMaxFirst, summ=0, wr=0;
for(i=0; i<n; i++)
cin >> array[i];	
cout << "Initial array:" << endl;	
for(i=0; i<n; i++)		
cout << array[i] << " ";	
min=array[0];	
for(i=1; i<n; i++)		
{if(array[i] < min)			
min = array[i];}		
cout << endl << "Minimal'nym elementom yavlyaetsya:" << min << endl;
for(i=0; i<n; i++){
	if (array[i] > 0){
	numMaxFirst=i;
break;}
}
for(i=n-1; i>=0; i--){
if (array[i]>0){ 
          for(j = numMaxFirst+1; j < i; j++)
                    summ+=array[j];
             cout << "summ between positive element: " << summ <<  endl;
      }
     break;
}

getch();

if (array[0]!=0){
do
{
wr= array[0];
for (i=1; i<n; i++){ 
array[i-1]=array[i];
for (j=n; j>=n; j--){
array[j+1]=array[j];
array[n]=wr;
}
}
}
while (array[0]=0);
}

for(i=0; i<n; i++){		
cout << array[i] << " ";}
return 0;
}
cudalover вне форума Ответить с цитированием
Старый 22.11.2009, 11:55   #2
Sweta
Форумчанин
 
Регистрация: 22.11.2007
Сообщений: 664
По умолчанию

Может и не оптимальный вариант.
Код:
#include <stdlib.h>
#include <iostream>
#include <iomanip>
#include <stdio.h>
#include <conio.h>
using namespace std;
int main() {
const int n = 10;
int array[n], k,i, l,j, min, s=0, numMaxFirst, summ=0, wr=0;
for(i=0; i<n; i++)
cin >> array[i];
cout << "Initial array:" << endl;
for(i=0; i<n; i++)
cout << array[i] << " ";
min=array[0];
for(i=1; i<n; i++)
{if(array[i] < min)
min = array[i];}
cout << endl << "Minimal'nym elementom yavlyaetsya:" << min << endl;
for(i=0; i<n; i++){
	if (array[i] > 0){
	numMaxFirst=i;
break;}
}
for(i=n-1; i>=0; i--){
if (array[i]>0){ 
          for(j = numMaxFirst+1; j < i; j++)
                    summ+=array[j];
             cout << "summ between positive element: " << summ <<  endl;
      }
     break;
}

getch();
k=0;
j=0;
l=n;
for(i=0;i<=l-k;i++)
 {
 if (array[i]==0)
 {
  for(j=i;j<l-i;j++)
    array[j]=array[j+1];
 k++;
i--;
 }
}

 if (k!=0)
while(k!=1)
{
 for(i=n-1;i>=0;i--)
  {
  array[i]=array[i-1];
  }
  array[0]=0;
 k--;
  }

for(i=0; i<n; i++){
cout << array[i] << " ";}
getch();
return 0;
}
Неприятности приходят и уходят, а жизнь продолжается!
Sweta вне форума Ответить с цитированием
Старый 22.11.2009, 15:50   #3
cudalover
Пользователь
 
Регистрация: 05.11.2008
Сообщений: 34
По умолчанию

Большущее спасибо.

Правда почему-то выводится на 1 нуль больше чем надо
cudalover вне форума Ответить с цитированием
Старый 23.11.2009, 07:32   #4
Sweta
Форумчанин
 
Регистрация: 22.11.2007
Сообщений: 664
По умолчанию

А так?
Код:
#include <stdlib.h>
#include <iostream>
#include <iomanip>
#include <stdio.h>
#include <conio.h>
using namespace std;
int main() {
const int n = 10;
int array[n], k,i, l,j, min, s=0, numMaxFirst, summ=0, wr=0;
for(i=0; i<n; i++)
cin >> array[i];
cout << "Initial array:" << endl;
for(i=0; i<n; i++)
cout << array[i] << " ";
min=array[0];
for(i=1; i<n; i++)
{if(array[i] < min)
min = array[i];}
cout << endl << "Minimal'nym elementom yavlyaetsya:" << min << endl;
for(i=0; i<n; i++){
	if (array[i] > 0){
	numMaxFirst=i;
break;}
}
for(i=n-1; i>=0; i--){
if (array[i]>0){
          for(j = numMaxFirst+1; j < i; j++)
                    summ+=array[j];
             cout << "summ between positive element: " << summ <<  endl;
      }
     break;
}

getch();
k=0;
j=0;
l=n;
for(i=0;i<n;i++)
 {
 if (array[i]==0)
 {
  for(j=i;j<n-1;j++)
    array[j]=array[j+1];
    array[n-1]=5;
    k++;
    i--;
  }
}

 if (k!=0)
while(k!=0)
{
 for(i=n-1;i>=0;i--)
  {
  array[i]=array[i-1];
  }
  array[0]=0;
 k--;
  }

for(i=0; i<n; i++){
cout << array[i] << " ";}
getch();
return 0;
}
Неприятности приходят и уходят, а жизнь продолжается!
Sweta вне форума Ответить с цитированием
Старый 23.11.2009, 09:17   #5
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Что-то вы тут многовато нагородили...
Предлагаю свой вариант:
Код:
//---------------------------------------------------------------------------

#pragma hdrstop

#include <tchar.h>
#include <stdlib.h>
#include <iostream.h>
//---------------------------------------------------------------------------

#pragma argsused
int _tmain(int argc, _TCHAR* argv[])
{
 int k,n[10],i,j,min;
 for (i = 0; i < 10; i++) {
  n[i]=random(4);
  min=((n[i]<min)&&(n[i]!=0))?n[i]:min;
  cout<<n[i]<<'\t';
  if (n[i]==0) {
   for (j = 0; (j<=i)&&(n[j]==0); j++);
   n[i]=n[j];
   n[j]=0;
  }
 }
 for (i = 0; i < 10; i++) {cout<<n[i]<<'\t';}

 cout<<"minimum="<<min<<'\n';system("pause");
	return 0;
}
//---------------------------------------------------------------------------
Правда тут 2) не выполняется, но докрутить не проблема.
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 23.11.2009, 12:49   #6
Sweta
Форумчанин
 
Регистрация: 22.11.2007
Сообщений: 664
По умолчанию

Цитата:
Что-то вы тут многовато нагородили...
Ну нагородили т.к. учимся. Ваш вариант конечно короче.
но он содержит недостаток - все же неправильно формирует массив
к примеру
генерирует к примеру 0 1 2 3 0 8 9 3 4 8
получим 0 0 2 3 1 8 9 3 4 8, а д.б. 0 0 1 2 3 8 9 3 4 8
Вот немного короче.
Код:
#include <stdlib.h>
#include <iostream>
#include <iomanip>
#include <stdio.h>
#include <conio.h>
using namespace std;
int main() {
const int n = 10;
int array[n],i,j, min, numMaxFirst, summ=0;
for(i=0; i<n; i++)
cin >> array[i];
cout << "Initial array:" << endl;
for(i=0; i<n; i++)
cout << array[i] << " ";
min=array[0];
for(i=1; i<n; i++)
{
if(array[i] < min)
   min = array[i];
}
cout << endl << "Minimal'nym elementom yavlyaetsya:" << min << endl;
for(i=0; i<n; i++)
{
 if (array[i] > 0)
 {
  numMaxFirst=i;
  break;
 }
}
for(i=n-1; i>=0; i--)
{
if (array[i]>0)
{
  for(j = numMaxFirst+1; j < i; j++)
   summ+=array[j];
  cout << "summ between positive element: " << summ <<  endl;
}
     break;
}
getch();
for(i=0;i<n;i++)
 {
 if (array[i]==0)
 {
   if(i!=0)
   {
   for(j=i;j>0;j--)
    array[j]=array[j-1];
    array[0]=0;
    }
  }
}

for(i=0; i<n; i++){
cout << array[i] << " ";}
getch();
return 0;
}
Неприятности приходят и уходят, а жизнь продолжается!
Sweta вне форума Ответить с цитированием
Старый 23.11.2009, 13:15   #7
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Цитата:
получим 0 0 2 3 1 8 9 3 4 8, а д.б. 0 0 1 2 3 8 9 3 4 8
Пардон не понял, а в чем разница то? Ведущими то нули стали.
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 23.11.2009, 13:57   #8
Sweta
Форумчанин
 
Регистрация: 22.11.2007
Сообщений: 664
По умолчанию

Цитата:
Также нужно преобразовать массив таким образом, чтобы сначала располагались все элементы, равные нулю, а потом - все остальные.
Цитата:
Например, если в массиве 2 нуля, первые 2 элемента при выводе заменяются нулями, а остальные просто сдвигаются.
Может я и не права.Судить автору.
Неприятности приходят и уходят, а жизнь продолжается!
Sweta вне форума Ответить с цитированием
Старый 23.11.2009, 13:59   #9
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Цитата:
Может я и не права
Нет если я не понял условия - я не против. Предлагаю ждать автора или забить на тему.
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 23.11.2009, 22:29   #10
cudalover
Пользователь
 
Регистрация: 05.11.2008
Сообщений: 34
По умолчанию

Спасибо вам огромнейшее еще раз!

Завтра буду разбираться
cudalover вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Двумерный массив, одномерный массив. Branbal Помощь студентам 14 18.11.2009 12:40
одномерный массив.... malova Помощь студентам 3 27.05.2009 20:22
одномерный массив curly182 Паскаль, Turbo Pascal, PascalABC.NET 2 16.05.2009 15:01
одномерный массив fatdog Assembler - Ассемблер (FASM, MASM, WASM, NASM, GoASM, Gas, RosAsm, HLA) и не рекомендуем TASM 4 23.02.2008 10:05