Динамические массивы

Тема в разделе "C/C++/C#", создана пользователем cudalover, 27 дек 2009.

Статус темы:
Закрыта.
  1. cudalover

    cudalover Гость

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

    У меня в ходе доработки программы возникла проблема.
    Программа выполняется, но входе работы вываливается: "dymass.exe - обнаружена ошибка. Приложение будет закрыто. Приносим извинения за неудобства"

    Программа должна (в одномерном динамическом массиве) вычислять:
    1) минимальный элемент массива;
    2) сумму элементов массива, расположенных между первым и последним положительными элементами.
    Преобразовать массив таким образом, чтобы сначала располагались все элементы, равные нулю, а потом — все остальные.

    Пожалуйста, посмотрите мой код:

    Код (C++):
    #include "stdafx.h"
    #include <iostream>
    #include <conio.h>
    using namespace std;
    int main ( ){
    const n = 10;
    int *array[n], k, x, i, l,j, min, s=0, numMaxFirst, summ=0, wr=0;
    for(i=0; i<n; i++){
    cin >> x;
    array[i] = new int (x);
    }
    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();
    for (i=0; i<n; i++)
    delete array[i];
    return 0;

    }

    Ошибка вылазит при попытке вывести массив с впереди стоящими нулями, поэтому мне кажется что ошибка вот где-то в этом цикле:
    Код (C++):
    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--;
    }
    }
     
  2. RocknRolla

    RocknRolla Гость

    Вопрос: почему ты используешь именно указатели???...да, кстати, у тебя совсем неверный этот цикл:
    Код (Text):
    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--;
    }
    }
    ты сам посмотри, что он у тебя делает - индексация во внутреннем цикле должна начинаться на 1 больше(j=i+1) и условие в нем неверное, условие if совсем неверно.......
     
Загрузка...
Похожие Темы - Динамические массивы
  1. Rinulik
    Ответов:
    2
    Просмотров:
    1.390
  2. morpheus
    Ответов:
    0
    Просмотров:
    1.934
  3. Julia61
    Ответов:
    1
    Просмотров:
    1.228
  4. vladis222
    Ответов:
    2
    Просмотров:
    2.253
  5. Omh
    Ответов:
    9
    Просмотров:
    5.169
Статус темы:
Закрыта.

Поделиться этой страницей