• B правой части каждого сообщения есть стрелки и . Не стесняйтесь оценивать ответы. Чтобы автору вопроса закрыть свой тикет, надо выбрать лучший ответ. Просто нажмите значок в правой части сообщения.

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

  • Автор темы cudalover
  • Дата начала
Статус
Закрыто для дальнейших ответов.
C

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--;
}
}
 
R

RocknRolla

Вопрос: почему ты используешь именно указатели???...да, кстати, у тебя совсем неверный этот цикл:
Код:
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 совсем неверно.......
 
Статус
Закрыто для дальнейших ответов.
Мы в соцсетях:

Обучение наступательной кибербезопасности в игровой форме. Начать игру!