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

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

Вернуться   Форум программистов > C/C++ программирование > Общие вопросы C/C++
Регистрация

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 06.06.2009, 11:54   #1
Svetlyachok
 
Регистрация: 05.04.2009
Сообщений: 6
По умолчанию Помогите разобраться с программой

Добрый день, всем!
Помогите, пожалуйста, разобраться с программой. Она полностью работает, мне только очень необходимо понять как работают и что означают некоторые функции и команды:

1. что означает вот определитель, а именно что за MW 81??
Код:
#define MW 81
2.
Код:
char s[MW],s1[MW],s2[MW];
3.
Код:
char *endstr;
4.
Код:
tmp=strtol(s,&endstr,10)+strtol(s1,&endstr,10); 	
itoa(tmp,s,10);
Код:
#include <stdio.h>	
#include <string.h>
#include <stdlib.h>
#define MW 81
void main()	
{
	char s[MW],s1[MW],s2[MW];	
	int pr=0;
	int i,j,k,t=0;	
	int m=1;
	long tmp;
char *endstr;				
	FILE *fin,*fout;				
	fin=fopen("1.txt","r");
	fout=fopen("rez.txt","w");
	fscanf(fin,"%s",s);	
strcpy(s2,s);					
	while(pr==0&&m<500)				
{
		i=0;
		t=0;
		k=strlen(s);				
		j=k-1;			
		strcpy(s1,s);				
		while(j>0)
		{
			if(s1[i]!=s[j])	
			{
				t=1;	
				break;	
			}
			i++;		
			j--;
		}
		if(t==0)			 
		{
			printf("4islo %s palindrom, proshlo %d shagov, isxodnoe 4islo %s\n",s,m,s2);
			fprintf(fout,"Число %s палиндром, прошло %d шагов, исходное число %s",s,m,s2);
			pr=1;
		}
		i=0; j=k-1;
		while(i<k)
		{
			s[i]=s1[j];
			i++; j--;
		}
		tmp=strtol(s,&endstr,10)+strtol(s1,&endstr,10); 	
		itoa(tmp,s,10);		
		m++;	
	}
	if(pr==0)				 
	{
		printf("Za 500 shagov viyavleno, chto chislo %s NE palindrom, isxodnoe 4islo %s\n",s,s2);
		fprintf(fout,"За 500 шагов выявлено, что число %s НЕ палиндром, исходное число %s",s,s2);
	}
	fcloseall();			
}
Svetlyachok вне форума Ответить с цитированием
Старый 06.06.2009, 12:20   #2
ROD
Linux C++ Qt ARM
Старожил
 
Аватар для ROD
 
Регистрация: 30.11.2008
Сообщений: 3,030
По умолчанию

Код:
#define MW 81
Препроцессор #define обозначает подстановку вместо чего-то первого чего-то второго. (первое от второго отделяется пробелом). В данном случае вместо MW всюду будет подставляться 81.

т.е. компилятор, фактически, при компиляции будет воспринимать строку
Код:
char s[MW],s1[MW],s2[MW];
как
Код:
char s[81],s1[81],s2[81];

Код:
char *endstr;
Переменная типа указатель на символьную переменную (char). В эту переменную записывается адрес переменной типа char


Код:
tmp=strtol(s,&endstr,10)+strtol(s1,&endstr,10); 	
itoa(tmp,s,10);

strtol - функция, преобразующая строку в переменную типа long
Из справки к компилятору
Цитата:
Syntax

#include <stdlib.h>
long strtol(const char *s, char **endptr, int radix);
long wcstol(const wchar_t *s, wchar_t **endptr, int radix);

Description

Converts a string to a long value.
strtol converts a character string, s, to a long integer value. s is a sequence of characters that can be interpreted as a long value; the characters must match this generic format:

[ws] [sn] [0] [x] [ddd]

where:

[ws] = optional whitespace
[sn] = optional sign (+ or -)
[0] = optional zero (0)
[x] = optional x or X

[ddd] = optional digits

strtol stops reading the string at the first character it doesn't recognize.
If radix is between 2 and 36, the long integer is expressed in base radix. If radix is 0, the first few characters of s determine the base of the value being converted.

First character Second character String interpreted as...

0 1 - 7 Octal
0 x or X Hexadecimal
1 - 9 Decimal

If radix is 1, it is considered to be an invalid value. If radix is less than 0 or greater than 36, it is considered to be an invalid value.
Any invalid value for radix causes the result to be 0 and sets the next character pointer *endptr to the starting string pointer.
If the value in s is meant to be interpreted as octal, any character other than 0 to 7 will be unrecognized.
If the value in s is meant to be interpreted as decimal, any character other than 0 to 9 will be unrecognized.

If the value in s is meant to be interpreted as a number in any other base, then only the numerals and letters used to represent numbers in that base will be recognized. (For example, if radix equals 5, only 0 to 4 will be recognized; if radix equals 20, only 0 to 9 and A to J will be recognized.)
If endptr is not null, strtol sets *endptr to point to the character that stopped the scan (*endptr = &stopper).

Return Value

strtol returns the value of the converted string, or 0 on error.
itoa - преобразование int в строку

Из справки
Цитата:
Syntax

#include <stdlib.h>
char *itoa(int value, char *string, int radix);
wchar_t *_itow(int value, wchar_t *string, int radix);

Description

Converts an integer to a string.
itoa converts value to a null-terminated string and stores the result in string. With itoa, value is an integer.
radix specifies the base to be used in converting value; it must be between 2 and 36, inclusive. If value is negative and radix is 10, the first character of string is the minus sign (-).

Note: The space allocated for string must be large enough to hold the returned string, including the terminating null character (\0). itoa can return up to 17 bytes.

Return Value

itoa returns a pointer to string.
Дилетант широкого профиля.

"Слова ничего не стоят - покажите мне код!" © Линус Торвальдс

Последний раз редактировалось ROD; 06.06.2009 в 12:35.
ROD вне форума Ответить с цитированием
Старый 06.06.2009, 12:24   #3
assasin
Форумчанин
 
Регистрация: 27.04.2009
Сообщений: 123
По умолчанию

да, itoa преобразует число в строку
<= P.S. если я тебе помог нажми весы слева <=
assasin вне форума Ответить с цитированием
Старый 06.06.2009, 12:31   #4
ROD
Linux C++ Qt ARM
Старожил
 
Аватар для ROD
 
Регистрация: 30.11.2008
Сообщений: 3,030
По умолчанию

Вооще большинство функций и операторов описанно в справке к компилятору.
Если ты импользуешь Turbo C++ то просто правой кнопкой мыши нажми по непоятному опертору/функции, в современных справку, надеюсь, сам сможешь найти.
Дилетант широкого профиля.

"Слова ничего не стоят - покажите мне код!" © Линус Торвальдс
ROD вне форума Ответить с цитированием
Старый 06.06.2009, 13:10   #5
Svetlyachok
 
Регистрация: 05.04.2009
Сообщений: 6
По умолчанию

Цитата:
Сообщение от ROD Посмотреть сообщение
Вооще большинство функций и операторов описанно в справке к компилятору.
Если ты импользуешь Turbo C++ то просто правой кнопкой мыши нажми по непоятному опертору/функции, в современных справку, надеюсь, сам сможешь найти.
программа эта написана в Visual C++, если бы я понимала и могла пользоваться, то не просила бы здесь помощи.


Спасибо большое, за объяснения!!! очень помогло!!
Svetlyachok вне форума Ответить с цитированием
Старый 06.06.2009, 13:48   #6
ROD
Linux C++ Qt ARM
Старожил
 
Аватар для ROD
 
Регистрация: 30.11.2008
Сообщений: 3,030
По умолчанию

Цитата:
Спасибо большое, за объяснения!!! очень помогло!!
всегда пожалуста.
Дилетант широкого профиля.

"Слова ничего не стоят - покажите мне код!" © Линус Торвальдс
ROD вне форума Ответить с цитированием
Старый 06.06.2009, 17:23   #7
Svetlyachok
 
Регистрация: 05.04.2009
Сообщений: 6
По умолчанию

а еще можете объяснить куда команда
Код:
break;
перекидывает, т. е. на какое место программы???
Svetlyachok вне форума Ответить с цитированием
Старый 06.06.2009, 17:55   #8
Sazary
В тени
Старожил
 
Аватар для Sazary
 
Регистрация: 19.12.2008
Сообщений: 5,788
По умолчанию

Цитата:
Сообщение от Svetlyachok
а еще можете объяснить куда команда
break;
перекидывает, т. е. на какое место программы??
Выходит из текущего цикла.
Вполне очевидно, чтобы что-то понять, необходимо книги читать.
Не нужно плодить бессмысленных тем. Вас Поиск избавит от многих проблем.

___________________________________ ___________________________________ _______
[=Правила форума=]_____[Поиск]_____[Литература по С++]____[Литература. Паскаль]
Sazary вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Помогите разобраться с программой First90_19 Паскаль, Turbo Pascal, PascalABC.NET 0 23.12.2008 01:58
Помогите с программой. dvmisha Общие вопросы C/C++ 2 22.09.2008 00:20
ГОРИТ ДИПЛОМ!!!! пожалуйста помогите разобраться с программой alexs2141 Фриланс 6 03.06.2008 20:30
Помогите с программой asale Общие вопросы Delphi 2 11.02.2007 20:06