Форум программистов
 
О проблемах, например, с регистрацией пишите сюда - alarforum@yandex.ru, проверяйте папку спам! Обязательно пройдите активизацию e-mail, а тут можно восстановить пароль.

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

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

Здесь нужно купить рекламу за 20 тыс руб в месяц! ) пишите сюда - alarforum@yandex.ru
Без учёта ботов - 20000 человек в день, 350000 в месяц.

Ответ
 
Опции темы
Старый 07.03.2011, 10:47   #1
>>STINGER<<
Пользователь
 
Аватар для >>STINGER<<
 
Регистрация: 01.05.2010
Сообщений: 17
По умолчанию Почему программа на С++ не работает с локальным описанием массива, но работает с глобальным?

Здравствуйте, у меня есть небольшая программа нахождения перестановки по таблице инверсий, она полностью рабочая, но во время её написания у меня возникла проблема, с которой раньше не встречался.

Код:
#include <iostream>
#include <math.h>

using namespace std;

int n;
int p[100010];
int z[100010];

int main()
{
	scanf("%d",&n);
	int t=sqrt(n*1.0);
	for (int i=0;i<n;i++)
		z[i/t]++;
	for (int f=0;f<n;f++)
	{
		int k,i;
		scanf("%d",&k);
		k++;
		for (i=0;k>0;)
			if (i%t==0 && z[i/t]<k)
			{
				k-=z[i/t];
				i+=t;
			}
			else
			{
				 k-=(p[i]==0?1:0);
				 i++;
			}
		p[i-1]=f+1;
		z[(i-1)/t]--;
	}
	for (int i=0;i<n;i++)
		printf("%d ",p[i]);
	return 0;
}
При описании массивов р и z локально, программа выводит пустые значения минус дофига, если обнулить массив р - выводит 0 как будто с массивом ни чего не происходит. Работает только с глобальным описанием массивов.

Буду очень благодарен, если вы разъясните такую ситуацию!

P.S Писал на Visual C++ 2010 Express. Массивы пробовал сделать меньше при локальным описании, но работает всё равно также.
>>STINGER<< вне форума Ответить с цитированием
Старый 07.03.2011, 11:55   #2
onewho
Форумчанин
 
Регистрация: 29.09.2010
Сообщений: 636
По умолчанию

локальные переменные не инициализируются 0, ручками надо, или с помощью fill()
onewho вне форума Ответить с цитированием
Старый 07.03.2011, 13:07   #3
>>STINGER<<
Пользователь
 
Аватар для >>STINGER<<
 
Регистрация: 01.05.2010
Сообщений: 17
По умолчанию

Спасибо! Разобрался, учту на будущее.
>>STINGER<< вне форума Ответить с цитированием
Старый 07.03.2011, 13:53   #4
Troi666
Пользователь
 
Регистрация: 01.12.2008
Сообщений: 58
По умолчанию

Хмм...а у меня тут вопрос возник... В коде используются функции printf(), scanf(), которые по идее определяются в stdio.h (он не подключен). Вместо него подключен iostream.h (cin и cout не используются).
Вопрос: iostream сам подключает stdio??
Troi666 вне форума Ответить с цитированием
Старый 08.03.2011, 09:56   #5
>>STINGER<<
Пользователь
 
Аватар для >>STINGER<<
 
Регистрация: 01.05.2010
Сообщений: 17
По умолчанию

По идее должен

да когда вы подключаете iostream он сам вызывает еще кучу модулей в одном из которых подключается cstdio

Последний раз редактировалось Stilet; 08.03.2011 в 10:21.
>>STINGER<< вне форума Ответить с цитированием
Ответ

Здесь нужно купить рекламу за 20 тыс руб в месяц! ) пишите сюда - alarforum@yandex.ru
Без учёта ботов - 20000 человек в день, 350000 в месяц.

Опции темы


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Почему не работает программа? St1mkA Помощь студентам 3 07.04.2010 18:51
подскажите почему программа не работает ZarakiKenpachi Общие вопросы C/C++ 5 05.11.2009 23:34
Почему программа не работает в Интернете Vadik(R) Работа с сетью в Delphi 4 02.11.2008 23:02
Подскажите почему не работает программа??? Danilyuk Помощь студентам 2 25.01.2008 10:15


Проекты отопления, пеллетные котлы, бойлеры, радиаторы
интернет магазин respective.ru
Пеллетный котёл Emtas
котлы EMTAS
Здесь нужно купить рекламу за 7 тыс руб в месяц! )
пишите сюда - alarforum@yandex.ru
ИКС 840