Модераторы: bsa
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Одномерный массив!Помогите. 
:(
    Опции темы
bonapart
Дата 10.10.2013, 19:17 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 1
Регистрация: 10.10.2013

Репутация: нет
Всего: нет



Дан массив действительных чисел, содержащий 25 элементов, записать в этот же массив сначала все положительные числа и нули, а затем все отрицательные, сохраняя порядок их следования.
Помогите доделать.
Код

#include<stdio.h>
#include<conio.h>
#define N 15
main()
{
   int *j;   
   int *chislo;
   int *pi,i,x;
   int a[N]={5,-4,-4,8,10,78,-8,0,4,5,-4,-5,-6,-10,0};
   
   for(pi=a;pi<N;pi++)
   {
      if(*pi>=0) printf("%d  ",*pi);
      else
      {
         for(j=pi;j<N;j++)
         {
            if(*pi>=0)
           {
                  chislo=pi; break;
                  
           }
                 
        }
   
                        for(;chislo<N,chislo>=0,*(chislo-1)>=0;)
                        {
                           tmp=*(chislo-1);
                           *(chislo-1)=*chislo;
                           *chislo=tmp;
                        }
                        printf("%d  ",*chislo); 
       }                     
    }
[code=cpp]



Это сообщение отредактировал(а) bonapart - 10.10.2013, 19:33
PM MAIL   Вверх
bsa
Дата 10.10.2013, 23:53 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Модератор
Сообщений: 9185
Регистрация: 6.4.2006
Где: Москва, Россия

Репутация: 85
Всего: 196



Сначала оформи код, чтобы его можно было читать. А потом мы поможем.
PM   Вверх
feodorv
Дата 12.10.2013, 10:35 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 2214
Регистрация: 30.7.2011

Репутация: 12
Всего: 45



Цитата(bonapart @  10.10.2013,  20:17 Найти цитируемый пост)
Помогите доделать.

С удовольствием, но Ваш код не годится. Как понять смешение указателя и индекса:
Цитата(bonapart @  10.10.2013,  20:17 Найти цитируемый пост)
   int *pi;
   for(pi=a;pi<N;pi++)

и синтаксический наворот:
Цитата(bonapart @  10.10.2013,  20:17 Найти цитируемый пост)
                        for(;chislo<N,chislo>=0,*(chislo-1)>=0;)

У Вас всё это компилировалось?


Если стоит ограничение в один единственный массив, то тактически задача решается правильно: выдавливаются отрицательные элементы в конец массива. Но стратегически, увы, код не возможно оценить, так как не ясен наворот с обменом элементов, а на вид порядок следования элементов не сохраняется.


Это сообщение отредактировал(а) feodorv - 12.10.2013, 10:38


--------------------
Напильник, велосипед, грабли и костыли - основные инструменты программиста...
PM MAIL   Вверх
shuttle
Дата 18.10.2013, 16:30 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 230
Регистрация: 9.4.2008

Репутация: нет
Всего: нет



заводишь второй массив, перебираешь исходный, если число больше нуля то записываешь во второй массив. потом еще раз перебираешь и записываешь нули и затем отрицательные числа. потом второй массив переписываешь в первый.
--------------------
PM MAIL   Вверх
baldina
Дата 18.10.2013, 20:39 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 3433
Регистрация: 5.12.2007
Где: Москва

Репутация: 15
Всего: 101



Цитата(feodorv @  12.10.2013,  10:35 Найти цитируемый пост)
У Вас всё это компилировалось?

почему нет? выражает конечно не то что надо, но как-то работать будет

Добавлено @ 20:53
Цитата(shuttle @  18.10.2013,  16:30 Найти цитируемый пост)
заводишь второй массив

нечестно, надо на месте

Цитата(feodorv @  12.10.2013,  10:35 Найти цитируемый пост)
стратегически, увы, код не возможно оценить, так как не ясен наворот с обменом элементов

похоже идея была такая: однопроходный алгоритм с двумя встречными циклами

1. ищем отрицательный элемент.
2. пока следующий элемент положителен, обмениваем со следующим

3. ищем положительный элемент
4. пока предыдущий элемент отрицателен, обмениваем с предыдущим

5. продолжаем с позиции, достигнутой в п.3

осталось маленько доделать

Это сообщение отредактировал(а) baldina - 18.10.2013, 20:54
PM MAIL   Вверх
baldina
Дата 18.10.2013, 20:59 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 3433
Регистрация: 5.12.2007
Где: Москва

Репутация: 15
Всего: 101



bonapart
Цитата(bonapart @  10.10.2013,  19:17 Найти цитируемый пост)
for(pi=a;pi<N;pi++)

pi (адрес памяти) бессмысленно сравнивать с N (числом элементов). его надо сравнивать тоже с адресом - элемента за концом массива, который вычисляется как a+N

Цитата(bonapart @  10.10.2013,  19:17 Найти цитируемый пост)
 for(;chislo<N,chislo>=0,*(chislo-1)>=0;)

видимо вместо запятой должно быть логическое И, записываемое как &&
ну и про сравнение указателя с числом то же, что и в пред. пункте

Добавлено через 3 минуты и 18 секунд
и еще про этот цикл: он бесконечный, т.к. chislo не меняется

Это сообщение отредактировал(а) baldina - 18.10.2013, 21:00
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "C/C++: Для новичков"
JackYF
bsa

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, JackYF, bsa.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Для новичков | Следующая тема »


 




[ Время генерации скрипта: 0.0730 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.