Ответ
 
Опции темы
Старый 29.08.2010, 11:23      #1
gpo8ocek
Новичок
 
Регистрация: 26.02.2007
Сообщений: 28
По умолчанию Решение проблем в программировании

Код:
#include <stdio.h>
#include <math.h>
#include <algorithm>

using namespace std;

struct coord {
	double x, y;
};

struct point {
	coord t;
	point *next;
};

coord a[100];

int main ()
{
	int n, i, j, maxn, minn;
	double min, max;

	freopen("input.txt", "rw", stdin);
	freopen("output.txt", "wt", stdout);

	scanf("%d", &n);
	scanf("%lf%lf", &a[0].x, &a[0].y);

	min = a[0].y;
	max = min;
	maxn = minn = 0;

	for (i = 1; i < n; i++) {
		scanf("%lf%lf", &a[i].x, &a[i].y);
		if (a[i].y > max) {
			max = a[i].y;
			maxn = i;
		}
		if (a[i].y < min) {
			min = a[i].y;
			minn = i;
		}
	}

	point.t = a[maxn];

}
На строчке
<<point.t = a[maxn];>>
вылетает
<<error C2143: синтаксическая ошибка: отсутствие ";" перед ".">>
причём, 2 раза.
gpo8ocek вне форума   Ответить с цитированием Вверх
Старый 29.08.2010, 23:14      #2
McCormick
Пользователь
 
Аватар для McCormick
 
Регистрация: 11.11.2006
Сообщений: 227
По умолчанию

point - это тип. Создай переменную данного типа и ей присваивай значение.
McCormick вне форума   Ответить с цитированием Вверх
Благодарности: 1
gpo8ocek (30.08.2010)
Старый 30.08.2010, 15:09      #3
gpo8ocek
Новичок
 
Регистрация: 26.02.2007
Сообщений: 28
По умолчанию

тьфу, внатуре ) Засиделся слишком за компом )
gpo8ocek вне форума   Ответить с цитированием Вверх
Старый 07.10.2010, 18:30      #4
SoaT
Модератор
Пользователь Mozilla Firefox
 
Аватар для SoaT
 
Регистрация: 12.09.2006
Адрес: about:robots
Возраст: 37
Сообщений: 3,825
По умолчанию

Помогите плз с задачей. Не могу понять почему стопится выполение
Задача
Натуральное число называется палиндромом, если оно читается одинаково с обеих сторон, например, 171.
Возьмём любое число. Если оно не палиндром, то перевернем его и сложим с исходным. Если не получится палиндром, то проделаем с ним то же и т.д. пока не получится палиндром. Для всех чисел от 100 до 200 найти, через сколько шагов получится палиндром и какой.

Что получилось у меня
Код:
# include<iostream>
# include<math.h>

int pere(int x) {
	int  i,imax,y, mas[100],z;

	for (i=0; x>0; i++)	{
		mas[i]=x%10;
		x/=10;
		}
		
	imax=i-1;

	for(z=pow(10,imax),i=0,y=0; i<=imax; z/=10,i++) {
		y+=mas[i]*z;
		
		}

	return(y);
}

using namespace std;

int palin(int x ){
	int i,j, m[1000];
	for (i=0; x>0; i++)	{
		m[i]=x%10;
		x/=10;
		}
	i=i-1;
	 for (j=i,i=0;i<j; i++,j--) {
		if (m[i] != m[j]) return 0;
	} 
	return 1;
}

int main() {
	int ch,i,sum;

	for(ch=100; ch<=200; ch++) {
		cout<<ch;
		if (palin(ch)==1)   cout<<"  palindrom\n";
		else  {
			i=0; sum=ch;
			while (palin(sum)==0) {
				sum=ch+pere(sum);   
				i++;
			}
			cout<<" "<<sum; cout<<" kol_shagov - "<<i<<endl;
		}
	}
}

Выводит до 161, 162 уже почему-то не пишет
Код:
100 101 kol_shagov - 1
101  palindrom
102 303 kol_shagov - 1
103 404 kol_shagov - 1
104 505 kol_shagov - 1
105 606 kol_shagov - 1
106 707 kol_shagov - 1
107 808 kol_shagov - 1
108 909 kol_shagov - 1
109 121 kol_shagov - 3
110 121 kol_shagov - 1
111  palindrom
112 323 kol_shagov - 1
113 424 kol_shagov - 1
114 525 kol_shagov - 1
115 626 kol_shagov - 1
116 727 kol_shagov - 1
117 828 kol_shagov - 1
118 929 kol_shagov - 1
119 414 kol_shagov - 62
120 141 kol_shagov - 1
121  palindrom
122 343 kol_shagov - 1
123 444 kol_shagov - 1
124 545 kol_shagov - 1
125 646 kol_shagov - 1
126 747 kol_shagov - 1
127 848 kol_shagov - 1
128 949 kol_shagov - 1
129 828 kol_shagov - 35
130 161 kol_shagov - 1
131  palindrom
132 363 kol_shagov - 1
133 464 kol_shagov - 1
134 565 kol_shagov - 1
135 666 kol_shagov - 1
136 767 kol_shagov - 1
137 868 kol_shagov - 1
138 969 kol_shagov - 1
139 161 kol_shagov - 10
140 181 kol_shagov - 1
141  palindrom
142 383 kol_shagov - 1
143 484 kol_shagov - 1
144 585 kol_shagov - 1
145 686 kol_shagov - 1
146 787 kol_shagov - 1
147 888 kol_shagov - 1
148 989 kol_shagov - 1
149 505 kol_shagov - 10
150 252 kol_shagov - 2
151  palindrom
152 1111 kol_shagov - 103
153 585 kol_shagov - 24
154 5555 kol_shagov - 10
155 22122 kol_shagov - 53
156 7557 kol_shagov - 121
157 686 kol_shagov - 40
158 383 kol_shagov - 36
159 393 kol_shagov - 9
160 282 kol_shagov - 2
161  palindrom
SoaT вне форума Пол: Мужчина   Ответить с цитированием Вверх
Старый 08.10.2010, 03:30      #5
zhekas
Пользователь
Пользователь Mozilla Firefox
 
Аватар для zhekas
 
Регистрация: 26.11.2007
Возраст: 39
Сообщений: 356
По умолчанию

подозреваю, что в 46 строке
Код:
				sum=ch+pere(sum);
надо заменить на
Код:
				sum=sum+pere(sum);
На примере числа 162. 162 - не палиндром. Производим операцию
162+261=423 . 423 - не палиндром. Дальше производим операцию над числом 423
423+324=747 747 - палиндром.

У вас же первое слагаемое всё время исходное число 162.
__________________
Gentoo user

Последний раз редактировалось zhekas; 08.10.2010 в 03:36.
zhekas вне форума Пол: Мужчина   Ответить с цитированием Вверх
Благодарности: 1
SoaT (08.10.2010)
Старый 08.10.2010, 09:50      #6
SoaT
Модератор
Пользователь Mozilla Firefox
 
Аватар для SoaT
 
Регистрация: 12.09.2006
Адрес: about:robots
Возраст: 37
Сообщений: 3,825
По умолчанию

Сообщение от zhekas Посмотреть сообщение
подозреваю, что в 46 строке
...
У вас же первое слагаемое всё время исходное число 162.
Сообщение от SoaT Посмотреть сообщение
Возьмём любое число. Если оно не палиндром, то перевернем его и сложим с исходным. Если не получится палиндром, то проделаем с ним то же и т.д. пока не получится палиндром
После долгих дебатов было решено, что в условии так имеется ввиду как написано у меня. Вопрос в другом. Почему по моему не решается задача?

zhekas, ты пробовал откомпилить и запустить? У меня на g++ 4.4.5 стопится. И на винде в VS 6.0 (синтаксис изменялся само-собой) тоже стопится.

Последний раз редактировалось SoaT; 08.10.2010 в 09:51.
SoaT вне форума Пол: Мужчина   Ответить с цитированием Вверх
Старый 08.10.2010, 13:44      #7
zhekas
Пользователь
Пользователь Mozilla Firefox
 
Аватар для zhekas
 
Регистрация: 26.11.2007
Возраст: 39
Сообщений: 356
По умолчанию

В таком случае данная процедура теряет смысл как алгоритм сведения числа к палиндрому.
А программа не стопится а зацикливается, т.е. не может выйти из цикла, поскольку не находит такого числа.
__________________
Gentoo user
zhekas вне форума Пол: Мужчина   Ответить с цитированием Вверх
Благодарности: 1
SoaT (08.10.2010)
Старый 08.10.2010, 15:41      #8
SoaT
Модератор
Пользователь Mozilla Firefox
 
Аватар для SoaT
 
Регистрация: 12.09.2006
Адрес: about:robots
Возраст: 37
Сообщений: 3,825
По умолчанию

zhekas, угу. Сделал sum+=pere(sum) и пришлось ещё все int заменить на unsigned int, а то некоторые числа уж больно здоровые)
Спасибо
SoaT вне форума Пол: Мужчина   Ответить с цитированием Вверх
Старый 08.10.2010, 16:23      #9
zhekas
Пользователь
Пользователь Mozilla Firefox
 
Аватар для zhekas
 
Регистрация: 26.11.2007
Возраст: 39
Сообщений: 356
По умолчанию

Боюсь, что они длиннее чем вы думаете. И замена даже на long их не спасает. Хотя вру. у меня просто int и long -это один и тот же тип.
Хотя sum вполне может перескакивать через максимальное значение, И получится не правильный ответ.
__________________
Gentoo user

Последний раз редактировалось zhekas; 08.10.2010 в 16:46.
zhekas вне форума Пол: Мужчина   Ответить с цитированием Вверх
Старый 08.10.2010, 18:28      #10
SoaT
Модератор
Пользователь Mozilla Firefox
 
Аватар для SoaT
 
Регистрация: 12.09.2006
Адрес: about:robots
Возраст: 37
Сообщений: 3,825
По умолчанию

zhekas, unsigned int же. Когда ставил long или просто int, то ответ получался не палиндром, да ещё и минусовой.
SoaT вне форума Пол: Мужчина   Ответить с цитированием Вверх
Старый 08.10.2010, 18:32      #11
zhekas
Пользователь
Пользователь Mozilla Firefox
 
Аватар для zhekas
 
Регистрация: 26.11.2007
Возраст: 39
Сообщений: 356
По умолчанию

За счет того что unsigned всегда положительный вы могли и не заметить перехода за максимальное значение.
Более того с помощью отладчика gdb можно заметить, что для ch=196

при i=30 sum меняется
с sum=3121672202
на sum=849466119

То есть sum уменьшилась. А этого не может быть sum может только возрастать. Значит sum перескочило через максимальное значение
__________________
Gentoo user

Последний раз редактировалось zhekas; 08.10.2010 в 18:50.
zhekas вне форума Пол: Мужчина   Ответить с цитированием Вверх
Благодарности: 1
SoaT (08.10.2010)
Старый 08.10.2010, 20:22      #12
SoaT
Модератор
Пользователь Mozilla Firefox
 
Аватар для SoaT
 
Регистрация: 12.09.2006
Адрес: about:robots
Возраст: 37
Сообщений: 3,825
По умолчанию

zhekas, оО так это и проверку толком то не сделать чтоли?
SoaT вне форума Пол: Мужчина   Ответить с цитированием Вверх
Старый 09.10.2010, 02:38      #13
zhekas
Пользователь
Пользователь Mozilla Firefox
 
Аватар для zhekas
 
Регистрация: 26.11.2007
Возраст: 39
Сообщений: 356
По умолчанию

В принципе, тут надо работать не с числами а с массивом разрядов (тем более вы и так сначала преобразуете число в массив разрядов, а потом обратно). От этого массива требуется только операция сложения, что достаточно просто.

Число 196 После 48150 шагов так и не преобразовалось в палиндром. sum имеет 20000 знаков, С остальными числами всё в порядке.
Числа 177 и 187 обрели свои настоящие палиндромы.

Добавлено через 1 час 10 минут
Код:
# include<iostream>
# include<math.h>

const int m=20000;
int sum[m],n;
int pere() {
	int  i,p, mas[m];

	for (i=0; i<n; i++)	{
		mas[i]=sum[i];
		}
	p=0;
	for(i=0;i<n;i++) {
		sum[i]=(mas[i]+mas[n-1-i]+p)%10;		
		p=(mas[i]+mas[n-1-i]+p)/10;		
		}
	if (p!=0)
	{
		sum[n]=p;
		n=n+1;
	}

	return 0;
}

using namespace std;

int palin(){
	int i,j;
	 for (j=n-1,i=0;i<j; i++,j--) {
		if (sum[i] != sum[j]) return 0;
	} 
	return 1;
}

int main() {
	int ch,i,j;

	for(ch=100; ch<=200; ch++) {
		cout<<ch;
		sum[0]=ch%10;
		sum[1]=(ch%100)/10;
		sum[2]=ch/100;
		n=3;
		if (palin()==1)   cout<<"  palindrom\n";
		else  {
			i=0; 
			while ((palin()==0)&(n<m)) {
				pere();
				i++;
			}
			cout<<" ";
			if (n>=m)
				cout<<" ne_nashel ";
			else
				for (j=n-1;j>=0;j--)
					cout<<sum[j]; 
			cout<<" kol_shagov - "<<i<<endl;
		}
	}
}
__________________
Gentoo user

Последний раз редактировалось zhekas; 09.10.2010 в 03:20.
zhekas вне форума Пол: Мужчина   Ответить с цитированием Вверх
Благодарности: 1
SoaT (15.10.2010)
Старый 15.10.2010, 12:47      #14
SoaT
Модератор
Пользователь Mozilla Firefox
 
Аватар для SoaT
 
Регистрация: 12.09.2006
Адрес: about:robots
Возраст: 37
Сообщений: 3,825
По умолчанию

zhekas, для переворота использую другой вариант, в 2-е строки без массивов. Да и задача уже "отвалилась", не надо вообщем.
За помощь спасибо!
SoaT вне форума Пол: Мужчина   Ответить с цитированием Вверх
Старый 26.03.2011, 23:00      #15
opium
Местный
 
Аватар для opium
 
Регистрация: 24.11.2008
Адрес: Петрозаводск
Сообщений: 815
По умолчанию

Подскажите, можно ли в с++ ввести команду, чтобы по заданной директории открывался файл?
__________________
opium вне форума Пол: Мужчина   Ответить с цитированием Вверх
Ответ


Здесь присутствуют: 1 (пользователей: 0 , гостей: 1)
 
Опции темы

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

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

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

Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
COD4: Решение возникающих проблем Hirurg Call Of Duty 4 1132 22.01.2018 01:11
Решение проблем MDM Mozilla Firefox 1244 21.01.2018 17:22
CoD2: Решение проблем aurea Call Of Duty 2 1535 17.06.2013 03:43
COD5: Решение возникающих проблем MDM Call Of Duty 5 23 05.04.2010 16:30
FEAR: Решение проблем MDM F.E.A.R. 265 06.01.2010 18:38


Обратная связь
Текущее время: 17:45. Часовой пояс GMT +3.


Powered by vBulletin® Version 3.8.4
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd. Перевод: zCarot