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

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

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

Восстановить пароль
Повторная активизация e-mail

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

Ответ
 
Опции темы Поиск в этой теме
Старый 13.12.2014, 01:59   #1
NYork
Пользователь
 
Регистрация: 17.11.2014
Сообщений: 35
По умолчанию Массивы С++

Ребят, помогите исправить ошибку, задание такое, в вещественном одномерном массиве, вычислить:

произведение элементов массива, расположенных между первым и вторым нулевыми элементами.

Прога как бы работает, но если я добавляю условия, что будет только один ноль, или его вообще не будет, то выдает ошибку, я никак не могу въехать где она прячется.
Вот такой код,
Код:

	for (i = 0; i < n; i++)// ищем первый ноль в массиве
		if (arr[i] == 0)
		{
		p = i; // если нашли первый, то тормозим программу
		break;
		}
		else
		{
			if (arr[i] != 0)
			{
				cout << "В масивве нолей нету";
				break;
			}
		}
		for (i = p + 1; i < n; i++) //ищем второй ноль в массиве
			if (arr[i] == 0)
			{
			v = i; //нашли, программу остановили
			break;
			}
			else
			{
				if (arr[i] != 0)
				{
					cout << "Нету второго 0";
					break;
				}
			}
		for (i = p+1; i < v; i++)//перебираем числа в массиве от 1 нуля до 2-го
		{
			sum = arr[i] * sum;
		}
		cout << endl << endl << sum<<endl << "resuljtat";

	
	delete[] arr;
	cout << endl;
	return 0;
}

Последний раз редактировалось Stilet; 13.12.2014 в 09:07.
NYork вне форума Ответить с цитированием
Старый 13.12.2014, 09:15   #2
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,792
По умолчанию

Я бы делал примерно так:
Код:
int zerocount=0,p=1;
for(i=0;i<n;i++){
 if(arr[i] && zerocount==1) p*=arr[i];
 if(!arr[i]) zerocount++;
}
if(zerocount==0) cout<<"Нулей нет"; else
 if(zerocount==1) cout<<"Второго нуля нет"; else
  cout<<p;
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 13.12.2014, 14:31   #3
NYork
Пользователь
 
Регистрация: 17.11.2014
Сообщений: 35
По умолчанию

Что то она у меня не компилируется.
NYork вне форума Ответить с цитированием
Старый 13.12.2014, 19:46   #4
Jurijus123
Заблокирован
 
Регистрация: 12.11.2014
Сообщений: 120
По умолчанию

Цитата:
Сообщение от NYork Посмотреть сообщение
Что то она у меня не компилируется.
галовастика подключи, увас странный компелятор уменя все работает.

Код:

#include <iostream>
using namespace std;

int main()
{
 
int zerocount=0,p=1,n=99999,arr[99999],i;
for(i=0;i<n;i++){
 if(arr[i] && zerocount==1) p*=arr[i];
 if(!arr[i]) zerocount++;
}
if(zerocount==0) cout<<"????? ???"; else
 if(zerocount==1) cout<<"??????? ???? ???"; else
  cout<<p;


return 0;
}
Jurijus123 вне форума Ответить с цитированием
Старый 14.12.2014, 01:26   #5
NYork
Пользователь
 
Регистрация: 17.11.2014
Сообщений: 35
По умолчанию

Не получается объединить ваш код с моим, все ошибки выкидывает. В моем случае считает правильно когда есть 2 нуля. Если только 1 или вообще нету - пишет ошибку.
Вот весь целый код, как его правильно объединить, что бы выводил на экран например, что есть 1 ноль, или вообще нету.

#include <iostream>
#include <time.h>
#include <iomanip>
using namespace std;
long int main()
{
setlocale(LC_ALL, "RU");
int n, choice, max, c, i;
double a, b, p, v;
cout << "Задайте размер массива: ";
cin >> n;
cout << endl << "1. Ручной ввод" << endl << "2. Автоматический ввод" << endl;
cout << endl << "Ваш выбор: ";
cin >> choice;
float *arr = new float[n];
cout << endl;
if (choice == 2)// автоматический ввод массива
{
cout << "Введите диапазон значений массива [a;b]" << endl << endl;
cout << "a: "; cin >> a;
cout << "b: "; cin >> b;
cout << endl;
srand(time(NULL));
c = (b - a)*10.0 + 1;// задаем, что массив будет из вещественных чисел
for (int i = 0; i < n; i++)
{
arr[i] = (rand() % c + a * 10) / 10.0;// для вещественного
if (i % 10 == 0)
{
cout << endl;
}
cout << setw(7) << arr[i];
}
}
if (choice == 1)//ввод руками

for (i = 0; i < n; i++)
{
cout << "Введи значение " << i + 1 << ": ";
cin >> arr[i];
}
{
double max = arr[0];// первая ячейка массива
for (i = 0; i < n; i++)//ищем номер макимального числа
if (max < arr[i])
{
max = arr[i];
}
cout << endl << endl << "Номер(a) максимального = ";
for (i = 0; i < n; i++)// ищем само число
if (arr[i] == max)
cout << i + 1 << ", ";
cout << " Само число: " << max << endl;
cout << endl;
}
for (i = 0; i < n; i++)// ищем первый ноль в массиве
if (arr[i] == 0)
{
p = i; // если нашли первый, то тормозим программу
break;
}
for (i = p + 1; i < n; i++) //ищем второй ноль в массиве
if (arr[i] == 0)
{
v = i; //нашли, программу остановили
break;
}
double sum = 1;
for (i = p + 1; i < v; i++)//перебираем числа в массиве от 1 нуля до 2-го
{
sum = arr[i] * sum;
}
cout << endl << endl << sum << endl << "результат";
delete[] arr;
cout << endl;
return 0;
}
NYork вне форума Ответить с цитированием
Старый 14.12.2014, 09:13   #6
Smitt&Wesson
Старожил
 
Аватар для Smitt&Wesson
 
Регистрация: 31.05.2010
Сообщений: 13,964
По умолчанию

Зачем такие сложности? Можно всё это написать более компактно:
Код:
#include<iostream.h>
#include<stdlib.h>

int main()
{
  setlocale(LC_ALL, "RU");
  int x = 10;
  int *arr = new int[x];
  int *ind = new int[x];
  arr[0]=5, arr[1]=6, arr[2]=0, arr[3]=7, arr[4]=8,
  arr[5]=9, arr[6]=1, arr[7]=0, arr[8]=2, arr[9]=3;
  int st = 0;
  for(int i=0; i<x; i++)// Находим нулевые элементы
    if(arr[i] == 0) {ind[st]=i; st++;}
  if(st < 2) {cout << "Мало нулевых элементов\n";}
  else// Нулей достаточно
    if(ind[0]+1 != ind[1])// Нули не рядом
    {
      int rez = 0;
      for(int i=ind[0]+1; i < ind[1]; i++)
       rez += arr[i];
      cout << "Сумма элементов = " << rez << "\n";
    }
    else cout << "Нет интервала между нулями\n";
  delete ind;
  delete arr;  
  system("pause");
  return 0;
}
Пиши пьяным, редактируй трезвым.
Справочник по алгоритмам С++ Builder
Smitt&Wesson вне форума Ответить с цитированием
Старый 14.12.2014, 15:32   #7
Fenex
Форумчанин
 
Аватар для Fenex
 
Регистрация: 15.02.2012
Сообщений: 823
По умолчанию

Ну тык вы посмотрите какую ошибку вам выкидывает. Тут экстрасенсов нет, никто не будет гадать что за ошибку вам там показывают.

И код обрамляйте тэгом [CODE] на форуме.
^-.-^ My GitHub
Fenex вне форума Ответить с цитированием
Ответ


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

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Одномерные массивы, двумерные массивы, строки Sand093 C++ Builder 11 20.05.2012 21:48
Двумерные массивы(матрица) 2)Строковые массивы(строки): 3)Структуры nuriyat Помощь студентам 1 21.01.2012 16:16
Двумерные массивы(массивы указателей на массивы) krytishka99 Помощь студентам 1 29.12.2011 19:51
Динамические массивы и массивы варианты N@stya Помощь студентам 0 11.06.2010 21:09
Даны одномерные массивы А и В. Сформировать массивы, состоящие из элемент LyaLya Помощь студентам 15 20.12.2009 14:12