Помогите пожалуйста С++... массивы одномерные..

d1mkoo
Сообщения: 12
Зарегистрирован: 06 фев 2008, 18:58

Здравствуйте уважаемые программисты :) это опять я)
Огромное спасибо за то што вы помогаете "нам", в решении "нелегких" для нас задач :)
Задание: "Одномерные массивы, задачи решать, используя функции.."
Сама задача :
В одномерный массив заданной размерности N (N от 2 до 30) вводятся произвольные числа. Определить начало и конец первой самой длинной последовательности подряд идущих нулевых элементов массива и количество этих элементов. Выполнить проверку правильности ввода информации.
ps огромное спасибо кто ответит, и огромный респект
Kankay
Сообщения: 9
Зарегистрирован: 22 фев 2008, 13:43

Привет.
Решение твоей задачи выглядит так:

Код: Выделить всё

//#include "main.h"

// заполнение массива
void InputData(int pMas[], const int& nSize)
{
	if (pMas==NULL) return;		// подстраховались на случай когда массив есче не создан
	cout<<"\nEnter the mass ( 4erez probel ):\n";
	for(int i=0;i<nSize;i++)
		cin>>pMas[i];
}

// вывод массива на экран
void ShowData(int pMas[], const int& nSize)
{
	for(int i=0;i<nSize;i++)
		cout<<pMas[i]<<" ";
}

// получение количества элементов подпоследовательности нулей
int GetCountOfZero(int pMas[], const int& nSize, const int& nIndex)
{
	if(nIndex>=nSize) return -1;		// подстраховались на случай выхода индекса за пределы массива
	for(int i=nIndex+1;i<nSize;i++)
		if(pMas[i]!=0)
			break;
	
	return i-nIndex;
}

void main()
{
	int* pMas=NULL;		// указатель на наш будущий массив
	int nSize;			// размер массива
	bool bFlag=true;	// флаг для определения правильности ввода количества элементов массива
	int nMaxLen=0;		// длина подпоследовательности нулей
	int nTemp;			// здесь временно храним длину текущей подпоследовательности нулей
	int nStartPos;		// позиция начала подпоследовательности нулей
	int nEndPos;		// позиция конца подпоследовательности нулей

	while(bFlag)		// контролируем правильный ввод длины массива
	{
		cout<<"\nVvedite razmer massiva (ot 2 do 30): ";
		cin>>nSize;
		if(nSize<2 || nSize>30) cout<<"Nepravilno vveden razmer massiva!";
		else bFlag=false;
	}

	pMas=new int [nSize];	// создали динамический массив

	InputData(pMas, nSize);	// заполнили массив

	cout<<"\nMassiv:\n";
	ShowData(pMas, nSize);	// вывели на экран полученный массив

	// поиск подпоследовательностей нулей
	for(int i=0;i<nSize;i++)
		if(pMas[i]==0)
		{
			// определяем количество нулей подпоследовательности
			nTemp=GetCountOfZero(pMas, nSize, i);
			if(nMaxLen<nTemp)
			{
				nMaxLen=nTemp;
				nStartPos=i;		// записали начало подпоследовательности нулей
				nEndPos=i+nMaxLen-1;// записали конец подпоследовательности нулей
			}
		}

	// вывод результатов:
	cout<<"\n\nResultat:"
		<<"\nStart   : "<<nStartPos
		<<"\nEnd     : "<<nEndPos
		<<"\nCount   : "<<nMaxLen;
	
	cout<<endl;

	delete [] pMas;			// вернули память в кучу
}
d1mkoo
Сообщения: 12
Зарегистрирован: 06 фев 2008, 18:58

спасибо большое... суть понял, но тут 13 ошибок...помогите, не могу понять што куда)))
ps у меня Borland C++Builder 6
Kankay
Сообщения: 9
Зарегистрирован: 22 фев 2008, 13:43

d1mkoo писал(а):спасибо большое... суть понял, но тут 13 ошибок...помогите, не могу понять што куда)))
ps у меня Borland C++Builder 6
А ты попробуй в начале файла написать следующее:

Код: Выделить всё

#include <iostream.h>
Я писал в Visual Studio 2005. Все класно работает :)
d1mkoo
Сообщения: 12
Зарегистрирован: 06 фев 2008, 18:58

я вначале менял 0)) но там еще какие т ошибки) некоторые понял, некоторые нет)
d1mkoo
Сообщения: 12
Зарегистрирован: 06 фев 2008, 18:58

ВОТ все ошибки..ps цифра это строка в которой ошибка))
E:\FileS\leaRNIn_INST_1_kurs\magu\2_semestr_18_02_2008\lab_4\main.cpp: In function `void ShowData(int*, int)':
E:\FileS\leaRNIn_INST_1_kurs\magu\2_semestr_18_02_2008\lab_4\main.cpp:16: error: `nSize' undeclared (first use this function)
E:\FileS\leaRNIn_INST_1_kurs\magu\2_semestr_18_02_2008\lab_4\main.cpp:16: error: (Each undeclared identifier is reported only once for each function it appears in.)
E:\FileS\leaRNIn_INST_1_kurs\magu\2_semestr_18_02_2008\lab_4\main.cpp: In function `int GetCountOfZero(int*, const int&, const int&)':
E:\FileS\leaRNIn_INST_1_kurs\magu\2_semestr_18_02_2008\lab_4\main.cpp:28: error: name lookup of `i' changed for new ISO `for' scoping
E:\FileS\leaRNIn_INST_1_kurs\magu\2_semestr_18_02_2008\lab_4\main.cpp:24: error: using obsolete binding at `i'
E:\FileS\leaRNIn_INST_1_kurs\magu\2_semestr_18_02_2008\lab_4\main.cpp: At global scope:
E:\FileS\leaRNIn_INST_1_kurs\magu\2_semestr_18_02_2008\lab_4\main.cpp:32: error: `main' must return `int'
Аватара пользователя
kapitay
Сообщения: 5
Зарегистрирован: 25 фев 2008, 11:15
Откуда: Moscow
Контактная информация:

Здравствуйте помогите пожалуйста с решением задачки с помощью массивов! Суть заключается в том что ты вводишь 29 значения температуры и программа определяет сколько раз температура меняла свой знак (допустим +5, а затем уже -10...) и посчитать из всех значений продолжительность самой длительной оттепели (оттепель считается от 0 и до бесконечности :) ). Вообщем помогите пожалуйста, а то никак не помогу додуматься, схватиться за верную нить размышлений :confused:
P.S. На всякий случай свой мэйл оставляю: hemo93@mail.ru
P.P.S. Программа должна работать в "console application"
drummer
Сообщения: 61
Зарегистрирован: 13 янв 2008, 18:43

Если я правильмо понял, то

Код: Выделить всё

#include <stdio.h>
#include <iostream>

int main()
{
  int max,k,i,t,prt,tp;
  k=0;prt=0;max=0;tp=0;
  for(i=0;i<3;i++)
  {
      cin>>t;
      if(t>0){tp++;} else
                      {
                          if(max<tp)
                              {
                                 max=tp;
                              };
                          tp=0;
                      };
      if(prt*t<0)
        {
           k++;
        };
      prt=t;
  };
  cout<<k<<endl<<max;

  return 0;
}
Аватара пользователя
kapitay
Сообщения: 5
Зарегистрирован: 25 фев 2008, 11:15
Откуда: Moscow
Контактная информация:

drummer, Спасибо огромное даже не ожидал что Вы так быстро работаете +) В коде разобрался и программа отлично работает. Плюс и респект большой
Berger
Сообщения: 1
Зарегистрирован: 25 фев 2008, 22:18

здравствуйте!
помогите пожалуйста
надо в С++ написать программу, которая рисует и закрашивает круг заданного с клавиатуры радиуса
:)
Ответить