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

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

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

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

Ответ
 
Опции темы
Старый 07.03.2011, 11: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, 12:55   #2
onewho
Форумчанин
 
Регистрация: 29.09.2010
Сообщений: 636
По умолчанию

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

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

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

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

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

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

Опции темы

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.

Быстрый переход

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


00:57.


Powered by vBulletin® Version 3.8.11
Copyright ©2000 - 2019, Jelsoft Enterprises Ltd.