Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: 6317
Последний выпуск: 19.06.2015

В С++

78K
03 мая 2012 года
ninika
5 / / 03.05.2012
Не могу найти никак ошибку.помогите,пожалуйста!Программа так-то работает,удаляет знакочередующийя ряд,но в конце появляется совсем "левое" число.задание такое: Удалить из массива последнюю группу элементов, представляющих собой знакочередующийся ряд.
#include "stdafx.h"
#include <iostream>
#include <stdio.h>
#include <conio.h>
using namespace std;

int Sdvig(int*a,int j,int n)


{
int i;

for(i=j;i<n;i++)
a=a[i+1];

return 0;
}

int Delete(int*a ,int n)
{
int i;
if(a[n-1]>0)
{
for(i=n-1;i>=0;i--)
{
if(a<0)
{
Sdvig(a,i-1,n);
i--;

if(a>0)
Sdvig(a,i-1,n);
else
return 0;
}
}
}
if(a[n-1]<0)
{
for(i=n-1;i>=0;i--)
{
if(a>0)
{
Sdvig(a,i-1,n);
i--;

if(a<0)
Sdvig(a,i-1,n);

else
return 0;
}
}

}

}

int main()
{
int *a,n,i;
cout<<"n=";
cin>>n;
a=(int*)calloc(n,sizeof(int));
for(i=0;i<n;i++)
cin>>a;

Delete(a,n);
for(i=0;i<n;i++)
cout<<a<<endl;
getch();

return 0;
}
326
27 мая 2012 года
sadovoya
757 / / 19.11.2005
Зачем такие сложности? По заданию ряд знакочередующийся в конце. Идешь с конца в начало и делаешь проверку произведения двух соседних членов на меньше нуля.
2.1K
27 мая 2012 года
disputant
95 / / 28.05.2007
Цитата: sadovoya
Зачем такие сложности? По заданию ряд знакочередующийся в конце. Идешь с конца в начало и делаешь проверку произведения двух соседних членов на меньше нуля.



Почему же?
Вариант:

1 2 3 4 5 -6 7 -8 9 -10 11 12 13 14 15

Удалять надо 5 ... 11 - последняя знакочередующаяся группа.

70K
08 августа 2012 года
ProkletyiPirat
76 / / 25.07.2012
Цитата:
Программа так-то работает, удаляет знакочередующийся ряд, но в конце появляется совсем "левое" число



ошибка в том что когда у тебя массив a[6]
a[x0 , x1 , x2 , x3 , x4 , x5]
и ты сдвигаешь x4<-x5
то x5 не удаляется! он приобретает "мусорное значение"
в итоге когда ты выводишь массив a[6] у тебя в конце муссор...


решение:
1.переписать всё в другой массив "нужного размера"
2.вести учёт количества удалённых ячеек и при выводе массива a[6] в for'е их учитывать


-----------------------------------------------------------------------------------------------------

ninika на будущее...
1.добавляй комментарии описывающие что делает твоя программа,функция,цикл...
(те кто тебе захотят помочь небудут листать твой код и думать "а нахрена он это вставил" они просто забьют на это и пойдут дальше)
2.когда вставляешь код вставляй его как код и тип указывай как С++
(не форматированный код читать нереально...)
вот такой код приятно! читать.

Код:
#include "stdafx.h"
#include <iostream>
#include <stdio.h>
#include <conio.h>
using namespace std;

int Sdvig(int*a,int j,int n)


{
    int i;

    for(i=j;i<n;i++)
        a=a[i+1];

    return 0;
}

int Delete(int*a ,int n)
{
    int i;
    if(a[n-1]>0){
        for(i=n-1;i>=0;i--){
            if(a<0){
                Sdvig(a,i-1,n);
                i--;

                if(a>0)  Sdvig(a,i-1,n);
                else return 0;
            }
        }
    }

    if(a[n-1]<0){
        for(i=n-1;i>=0;i--){
            if(a>0){
                Sdvig(a,i-1,n);
                i--;

                if(a<0)Sdvig(a,i-1,n);
                else return 0;
            }
        }
    }
}

int main()
{
    int *a,n,i;

    cout<<"n=";
        cin>>n;

    a=(int*)calloc(n,sizeof(int));
    for(i=0;i<n;i++)
        cin>>a;

    Delete(a,n);

    for(i=0;i<n;i++)
        cout<<a<<endl;

    getch();

    return 0;
}

Знаете кого-то, кто может ответить? Поделитесь с ним ссылкой.

Ваш ответ

Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог