Перейти к содержимому

Фото
* * * * * 1 голосов

Опять этэт си


  • Закрытая тема Тема закрыта
24 ответов в этой теме

#1 Infern0

Infern0
  • Постоялец
  • 1 103 сообщений
  • Откуда:Tallinn,Lasna / TTU

Отправлено 02 февраля 2007 - 17:23

Вообщем получил от Ксю такое задание:
1) С клавы вводится x (|x|>1 ) и e (0<e<1)
2) При помощи функции заполнаэтся массив А следушим образом:
A1=x
A2=x^3/3
A3=x^5/5
.....
пока кол-во елементов L в массиве А не превысило 15
3)На екран выводится результат сл образом : A[L] = елемент

Мои догадки таковы , но очевидно не верны... хелп ...

#include <stdio.h>
main()
{
	  double x, e,A[20];
	  int L;
	  do{
			 printf("Enter x:[ |x|>1 ]\n");
			 scanf("%lf", &x);
			 }
	  while (fabs(x)<1);
	  do{ 
			printf("Enter e:[ 0<e<1 ]\n");
			scanf("%lf", &e);
			 }
	  while (e<=0 || e>=1);
	  for(L=0;L<=14;L++)
					  {
					  A[L]=pow(x ,2*L+1)/(2*L+1);
					  printf("A[%d] = %.1lf\n",L,A[L]);
					  }
	  system("pause");
}

с таким видом у меня выводится:
A[0]=1
A[1]=3
A[2]=5
...
не зависимо от вводимыx чисел

Сообщение изменено: Infern0 (02 февраля 2007 - 23:00 )

  • 0
My TUT/TTÜ docs: http://goo.gl/FTSZy

#2 UnNown™

UnNown™
  • Пользователь
  • 207 сообщений

Отправлено 02 февраля 2007 - 22:34

а попробуй массив флотам или дабалом сделать =) и к стати для чего у тебя е используеться?

Сообщение изменено: UnNown™ (02 февраля 2007 - 22:38 )

  • 0

#3 Infern0

Infern0
  • Постоялец
  • 1 103 сообщений
  • Откуда:Tallinn,Lasna / TTU

Отправлено 02 февраля 2007 - 22:48

e ето "епсилон" , т.е. разница между числом и следушим числом ( A[L]-A[L+1] )
на самом деле я условие с использованием е упустил , нада чтобы хотябы так работало

Edit:
Странно , раньше делал массив даблом , он мне выдавал опупенное число (~50 цыфр), сейчас сделал даблом , вроде как работает ...
Ох уж етот ц ...
Исправил...

P.S.
вот мне интересно ... задание правильно выполнено ?... всмысле применен ли массив ?

Сообщение изменено: Infern0 (02 февраля 2007 - 23:08 )

  • 0
My TUT/TTÜ docs: http://goo.gl/FTSZy

#4 anaga

anaga
  • Постоялец
  • 702 сообщений

Отправлено 03 февраля 2007 - 15:13

Infern0,

всмысле применен ли массив ?

да, безусловно применен.
Только вот Ксюша дала 3 задание такое же как и 2 с таким намеком, чтобы мы сделали программу с функциями, чтобы функции обменивались данными с основной программой.
Тоесть тебе нужно A[L]=pow(x ,2*L+1)/(2*L+1); вынести в отдельную функцию.
  • 0

#5 Infern0

Infern0
  • Постоялец
  • 1 103 сообщений
  • Откуда:Tallinn,Lasna / TTU

Отправлено 03 февраля 2007 - 15:19

ок, пасиб. буду пытатся ... ждите обновлений )
  • 0
My TUT/TTÜ docs: http://goo.gl/FTSZy

#6 UnNown™

UnNown™
  • Пользователь
  • 207 сообщений

Отправлено 03 февраля 2007 - 21:36

знаю я чтоо такое эпсилон и зечем оно используеться в пригах у ксб=) я тебе намекал что оно тоже должно использоваться.... может у тебя выдавало большие числа потому что либо ты неправельным типом выводил либо неопределенное значение выводишь....
  • 0

#7 Infern0

Infern0
  • Постоялец
  • 1 103 сообщений
  • Откуда:Tallinn,Lasna / TTU

Отправлено 04 февраля 2007 - 00:32

UnNown™, не , все нормуль работает , теперь покрайней мере... потом напечатаю уже с епсилоном...

P.S. кста ... а как делать обрашение к другой функции ... я прост в танке и ето моё первое задание у ксю по массивам

знаю что в бейсике ето call а в си , хз ..
  • 0
My TUT/TTÜ docs: http://goo.gl/FTSZy

#8 Firelord

Firelord
  • Постоялец
  • 854 сообщений
  • Откуда:Таллинн

Отправлено 04 февраля 2007 - 01:49

знаю что в бейсике ето call а в си , хз ..

хех, ты вот этой фразой напомнил одно аниме, Golden Boy.

Там чел хотел получить работу программиста, и выучил бейсик. Какого же было его удивление, когда его попросили сделать что-либо на си! :)

Ну а по теме, функция вызывается элементарно. Через обращение к ней по её имени. Приведу здесь свою программу, где я уже использовал функции. Думаю, как наглядное пособие может и пригодится. Единственное, здесь я не использовал указатели. Впрочем, это уже совсем другая история...

/* 	Calendar Calculator by Alex A. Teplyakov (IASB-18)
	
	© & ® 2006 ATS development
	
	for Tallinn University of Technology */
	
/*	AppLanguage:	Estonian (eesti) 
	Comments:		English				 */

#include <stdio.h>
#include <math.h>
#include <stdlib.h>
#include <conio.h>
#include <string.h>

#define TABLETOP "\xDA\xC4\xC4\xC2\xC4\xC4\xC2\xC4\xC4\xC2\xC4\xC4\xC2\xC4\xC4\xC2\xC4\xC4\xC2\xC4\xC4\xBF"
#define TABLEMID "\xC3\xC4\xC4\xC5\xC4\xC4\xC5\xC4\xC4\xC5\xC4\xC4\xC5\xC4\xC4\xC5\xC4\xC4\xC5\xC4\xC4\xB4"	
#define TABLEBTM "\xC0\xC4\xC4\xC1\xC4\xC4\xC1\xC4\xC4\xC1\xC4\xC4\xC1\xC4\xC4\xC1\xC4\xC4\xC1\xC4\xC4\xD9"
#define TABLEDAY "\xB3 E\xB3 T\xB3 K\xB3 N\xB3 R\xB3 L\xB3 P\xB3"

/* Leap Year Control*/

int isLeap(int year)
{
	int leap = 0;
	
	if ( ((year % 4) == 0) && (((year % 100)!=0) || ((year % 400)==0)))
	{
		leap = 1;
	}

	return leap;
}

/* Days in month */

int mDays(int month, int year)
{
	int days = 31;
	
	switch (month)
	{
		case 4:
		case 6:
		case 9:
		case 11:
			days = 30;
			break;
		case 2:
			days = 28+isLeap(year);
			break;
		default:
			days = 31;
			break;
	}
	
	return days;
}

/* Calendar table builder 1.0 */

/* Required data:

	- dayOffset;	Assuming 1 = Monday, 2 = Tuesday, ..., 7 = Sunday,
					meaning the first day of the month;
					
					dayOffset = (2 - n), where n = {1, 2, ..., 7}.

	- month;		Assuming 1 = January, 2 = February, ..., 12 = December;
					the month for which the calendar is built;
					
	- year;			the year for which the calendar is built;

*/

void buildCalendar(dayOffset, month, year)
{
	printf("\n");
	
	switch (month)
	{
		case 1:
			printf("	 Jaanuar %d\n", year);
			break;
		case 2:
			printf("	 Veebruar %d\n", year);
			break;
		case 3:
			printf("	  Marts %d\n", year);
			break;
		case 4:
			printf("	  Aprill %d\n", year);
			break;
		case 5:
			printf("	   Mai %d\n", year);
			break;
		case 6:
			printf("	  Juuni %d\n", year);
			break;
		case 7:
			printf("	  Juuli %d\n", year);
			break;
		case 8:
			printf("	  August %d\n", year);
			break;
		case 9:
			printf("	September %d\n", year);
			break;
		case 10:
			printf("	 Oktoober %d\n", year);
			break;
		case 11:
			printf("	 November %d\n", year);
			break;
		case 12:
			printf("	Detsember %d\n", year);
			break;
	}
	
	printf(TABLETOP);
	printf("\n");
	printf(TABLEDAY);
	printf("\n");
	printf(TABLEMID);
	printf("\n");
	
	int n, m, daysThisMonth = mDays(month, year), k = dayOffset;
	
	for (n = 0; n < 6; n++)
	{
		printf("\xB3");
		for (m = 0; m < 7; m++)
		{
			if (k < 1 || k > daysThisMonth)
			{
				printf("  \xB3");
			}
			else if (k < 10)
			{
				printf(" %d\xB3", k);
			}
			else
			{
				printf("%d\xB3", k);
			}
			
			k++;
		}
		printf("\n");
		if (k > daysThisMonth)
		{
			break;
		}
		printf(TABLEMID);
		printf("\n");
	}
	
	printf(TABLEBTM);
	printf("\n\n");
}

int getDayNum(char dayLetter)
{
	char dayList[] = "ETKNRLP";
	int n = 1, dayNum;
	for (n = 1; n < 8; n++)
	{
		if (dayList[n-1] == dayLetter)
		{
			dayNum = n;
			break;
		}
	}
	return dayNum;
}

main()
{
	/* Initial and final data declaration*/
	
	int yt, yn, mt, mn, dt, dn, DaysPassed;
	
	char curday[1];
	
	/* Helpers */
	
	int i, neg, d1, d2, m1, m2, y1, y2;
	
	/* Welcome messages and initial data entry */
	
	system("cls");
	printf("Kalendri kalkulaator 1.0 Aleksei Tepljakov\n\n(c) & (r) 2006 ATS Development, Tallinna Tehnikaulikool\n\n");
	
	printf("Endise kuupaeva sisestamine\n\nAasta: ");
	scanf("%d", &yt);
	
	do
	{
		printf("Kuu: ");
		scanf("%d", &mt);
	}
	while (mt < 1 || mt > 12);
	
	do
	{
		printf("Paev: ");
		scanf("%d", &dt);
	}
	while (dt < 1 || dt > mDays(mt, yt));
	
	printf("\nTanase kuupaeva sisestamine\n\nAasta: ");

	scanf("%d", &yn);
	
	do
	{
		printf("Kuu: ");
		scanf("%d", &mn);
	}
	while (mn < 1 || mn > 12);
	
	do
	{
		printf("Paev: ");
		scanf("%d", &dn);
	}
	while (dt < 1 || dn > mDays(mn, yn));

	do
	{
		printf("Nadalapaev: ");
		scanf("%s", curday);
		strupr(curday);
	}
	while ((curday[0] != 'E') && (curday[0] != 'T') && (curday[0] != 'K') && (curday[0] != 'N')  && (curday[0] != 'R')  && (curday[0] != 'L')  && (curday[0] != 'P'));
	
	/* Now we find out the number of this day */
	
	int curdayNum = getDayNum(curday[0]);
	
	/* Now we calculate the days between the two dates */
	
	/* This part has been imported from Ksenija Grigorjeva's example */
	
	if ((yt>yn) || ((yt == yn) && ((mt > mn) || (mt == mn) && (dt > dn))))
	{
		neg = 1;
		y1 = yn;
		m1 = mn;
		d1 = dn;
		y2 = yt;
		m2 = mt;
		d2 = dt;
	}
	else
	{
		neg = 0;
		y1 = yt;
		m1 = mt;
		d1 = dt;
		y2 = yn;
		m2 = mn;
		d2 = dn;
	}
	
	DaysPassed = d2 - d1;
	
	if (y1 == y2)
		
		{
			if (m2 > m1)
			{
				for (i=m1; i<m2; i++)
				{
					DaysPassed += mDays(i, y1);
				}
			}
		}
		else
		{
			for (i=y1+1; i<y2; i++)
			{
				DaysPassed += 365 + isLeap(i);
			}
			
			for (i=m1; i<13; i++)
			{
				DaysPassed += mDays(i, y1);
			}
			
			for (i=1; i<m2; i++)
			{
				DaysPassed += mDays(i, y2);
			}
		}
	if (neg)
	{
		DaysPassed = -DaysPassed;
	}
	
	
	/* Now we determine what day of week is this date */
	
	int GetDay = DaysPassed % 7;
	
	int OldDayNum;
	
	if (GetDay < curdayNum)
	{
		OldDayNum = curdayNum - GetDay;
	}
	else
	{
		OldDayNum = curdayNum - GetDay + 7;
	}
	
	printf("\n\nStatistika:\n\nPaevi kuupaevade vahel: %d\n", DaysPassed);
	
	/* Now we print out the day of the week of the previous date */
	
	printf("%0.2d.%0.2d.%d oli ", dt, mt, yt);
	
	switch (OldDayNum)
	{
		case 1:
			printf("esmaspaev.");
			break;
		case 2:
			printf("teisipaev.");
			break;
		case 3:
			printf("kolmapaev.");
			break;
		case 4:
			printf("neljapaev.");
			break;
		case 5:
			printf("reede.");
			break;
		case 6:
			printf("laupaev.");
			break;
		case 7:
			printf("puhapaev.");
			break;
	}
	
	printf("\n\nKalender:\n\n");
	
	/* Now we build the calendar for that month, but first
	we need to determine what day was the first date of that
	month */
	
	int wd = OldDayNum, dat = dt;
	
	do
	{
		wd--;
		if (wd == 0)
		{
			wd = 7;
		}
		dat--;
	}
	while (dat > 1);
	
	int offset = 2 - wd;
	
	buildCalendar(offset, mt, yt);
	
	printf("\nOK");
	int pause = getch();
	printf("\n");
}

Тут всего 4 функции.

3 простые, isLeap, mDays и getDayNum, и одна сложная, buildCalendar.

Они малооптимизированы, но принцип должен стать понятен.

Сообщение изменено: Firelord (04 февраля 2007 - 01:57 )

  • 0
Материалы для студентов с курса системотехники (IASB/IASM): http://starspirals.net/ttu/

#9 Infern0

Infern0
  • Постоялец
  • 1 103 сообщений
  • Откуда:Tallinn,Lasna / TTU

Отправлено 04 февраля 2007 - 02:37

Firelord, спасиб, хоть и ожидалось кое-что поменьше ... но кое что просматривается ... завтра буду сидеть над прогой ))
  • 0
My TUT/TTÜ docs: http://goo.gl/FTSZy

#10 V^v

V^v
  • Пользователь
  • 316 сообщений

Отправлено 04 февраля 2007 - 16:23

Firelord, твой календарь дает неправильные ответы на даты. Попробуй, например, октябрь 1582, или любой месяц года 0. в октябре 1582 был переход с юлианского на грегорианский календарь, после 4 сразу 15 день =), а года 0 ни в том, ни в другом календаре вооще нет. Еще юзер может вводить года со знаком минус, это баг или феатуре?
функция strupr не входит в стандартную библиотеку C, getch() тоже.
char curday[1] - это как то странно, нет ? :) ну потратил бы ты еще 1 байт, и не было бы здесь переполнения буффера ввода: scanf("%s", curday); тебе ведь чар нужен, так и используй %c .
  • 0
int main(void)

#11 Firelord

Firelord
  • Постоялец
  • 854 сообщений
  • Откуда:Таллинн

Отправлено 04 февраля 2007 - 16:51

V^v,

Конечно, это абсолютно сырая версия, но всё же кое-как работает. И для общего примера, в объёме материала первого курса, как я думаю, сгодится.

char curday[1] - это как то странно, нет ? ну потратил бы ты еще 1 байт, и не было бы здесь переполнения буффера ввода: scanf("%s", curday); тебе ведь чар нужен, так и используй %c .

Потрать сам и посмотри, что получится. У меня там где-то ошибка, но я её так и не нашёл. Впрочем, я никогда не претендовал на безупречное программирование. ;)

Сообщение изменено: Firelord (04 февраля 2007 - 17:07 )

  • 0
Материалы для студентов с курса системотехники (IASB/IASM): http://starspirals.net/ttu/

#12 V^v

V^v
  • Пользователь
  • 316 сообщений

Отправлено 04 февраля 2007 - 18:14

Firelord, ну безупречное программирование это идеал, до него далеко, а правильное использование функций стандартной библиотеки это другое. какая у тебя ошибка? я заменил curday на чар везде и у меня работает.
  • 0
int main(void)

#13 Firelord

Firelord
  • Постоялец
  • 854 сообщений
  • Откуда:Таллинн

Отправлено 04 февраля 2007 - 20:48

Firelord, ну безупречное программирование это идеал, до него далеко, а правильное использование функций стандартной библиотеки это другое. какая у тебя ошибка? я заменил curday на чар везде и у меня работает.

Ну а кто сказал, что мы ограничены стандартной библиотекой?

Если бы я знал, где ошибка, давно бы исправил. Если я выставлял там чар, ошибка вылезала, уже с трудом помню какая - много времени прошло с тех пор, как я это писал.
  • 0
Материалы для студентов с курса системотехники (IASB/IASM): http://starspirals.net/ttu/

#14 V^v

V^v
  • Пользователь
  • 316 сообщений

Отправлено 04 февраля 2007 - 21:34

Ну а кто сказал, что мы ограничены стандартной библиотекой?
в данном случае, ограничены, а вобще нет
Если я выставлял там чар, ошибка вылезала, уже с трудом помню какая - много времени прошло с тех пор, как я это писал.
если просто заменить тип char[] на char, будет много ошибок, например, там где используешь []. но это не такие ошибки, над которыми надо ломать голову =)
  • 0
int main(void)

#15 Infern0

Infern0
  • Постоялец
  • 1 103 сообщений
  • Откуда:Tallinn,Lasna / TTU

Отправлено 16 февраля 2007 - 12:47

так , значит переписал я свою прогу , оказывается нада отделную функцию для заполнения массива. вот дело в том что не знаю как правильно сделать чтобы мейн посилала правильно данные в другую функцию и правильно их принимала. мой код:
#include <stdio.h>
#define L 15

main()
{
	  //Ishodnye dannye
	  int i,n;
	  double x,e,A[L];
	  
	  //Vvod dannyh
	  /*  X  */
	  do{
			 printf("Vvedite x:[ |x|>1 ]\n");
			 scanf("%lf", &x);
		}
	  while (fabs(x)<=1);
	  /*  E  */
	  do{ 
		  printf("Vvedite e:[ 0<e<1 ]\n");
		  scanf("%lf", &e);
		}
	  while (e<=0 || e>=1);
	  //Zapolnenie massiva
//Oshibka nachinaja ot sjuda
	  n=count_mass();
	  A[L]=count_mass(x,e);
//do sjuda
	  //Vyvod rezultata
	  printf("\nVsego elementov: %d\n",n+1);
	  printf("\nIndeks:\tElement:\n");
	  for (i=0; i<=n; i++)printf("A(%2d) = %15.5f;\n", i, A[i]);
	  if (i!=L)
	  {
		printf("\nA(%2d) Udovoletvorjaet uslovie: |A(i)-A(i-1)|<=e\n", n+1);
		printf("\n[ |A(%2d)-A(%2d)| = \n|%.1lf -( %.1lf)| = %.1lf ] <= [ e = %.2lf ]\n", n+1, n, A[n+1], A[n], fabs(A[n+1]-A[n]), e);
	  }
	system("pause");
}

count_mass(double x , double e)
{		  
	  double A[i];
	  int n,i;
	  A[0]=x;
	  for(i=1;i<L;i++)
	  {
	  A[i]=pow(x,2*i+1)/(2*i+1);
	  if (fabs(A[i]-A[i-1])<=e) break;
	  n=i;
	  }
}

Сообщение изменено: Infern0 (16 февраля 2007 - 12:47 )

  • 0
My TUT/TTÜ docs: http://goo.gl/FTSZy

#16 UnNown™

UnNown™
  • Пользователь
  • 207 сообщений

Отправлено 16 февраля 2007 - 23:11

размести свою долролнительную функцию над мэйном и все будет
  • 0

#17 Infern0

Infern0
  • Постоялец
  • 1 103 сообщений
  • Откуда:Tallinn,Lasna / TTU

Отправлено 17 февраля 2007 - 01:33

неа , всеравно ничего особого не проишодит ...
  • 0
My TUT/TTÜ docs: http://goo.gl/FTSZy

#18 Firelord

Firelord
  • Постоялец
  • 854 сообщений
  • Откуда:Таллинн

Отправлено 18 февраля 2007 - 12:51

Я свою программу сделал по-другому. Без указателей, естественно, не обошлось, ну и не должно было.

Я вынес генерацию массива вообще в отдельную функцию, и сделал ешё одну вспомогательную (элементы моего массива B - это максимумы групп элементов массива A).

Приведу на всякий случай, может больше поможет, чем календарь, в котором указатели не были применены вообще...

/*		Massiivid
		Autor: Aleksei Tepljakov
		
		(C) & (R) 2006, Tallinna Tehnikaulikool
		
		ver 1.2 (funktsioonidega)
		
*/

#include <stdio.h>
	
	double max(int M, int P, int l, double *A)
	{   
		int s;
		double Val, MaxVal=0;
		int r = (l*P)+1;
		
			for (s = r; s <= (l+1)*P; s++)
			{
				Val = A[s-1];
			
				if (MaxVal < Val)
				{
					MaxVal = Val;
				}
			}
		  return MaxVal;
	}
	
		void createArray(int M, int P, double *A)
	{
		
	   	double B[M];
		int n;
	   	
	   	printf("\nLoon massiivi B...\n\n");
		
		for (n=0; n<M; n++)
		{
			B[n] = max(M, P, n, A);
			printf("B[%d] = %lf\n", n+1, B[n]);
		}
	}

	
	int main()
	{
		int M, P;
		double EntVal;
		
		printf("Massiivid, ver 1.2 - Aleksei Tepljakov, 061750 / IASB28, TTU\n\n");
		
		/* Andmete sisestamine */
		
		do
			{
				printf("Sisesta M (M >= 1): ");
				scanf("%d", &M);
			}
			while (M < 1);
	
		/* Sisestame P */
	
		do
			{
				printf("Sisesta P (0 < P <= 10): ");
				scanf("%d", &P);
			}
			while (P < 1 || P > 10);
		
		/* Sisestame massiivi A elemendid, kokku (M*P) */
	
		printf("\nNuud sisestage massiivi A (kokku %d elemente)\n\n", M*P);
	
		int n;
		double A[M*P];
		
		for (n = 0; n < M*P; n++)
			{
				printf("Sisesta A[%d]: ", n+1);
				scanf("%lf", &EntVal);
				A[n] = EntVal;
			}
		
		/* Nuud moodustame massiivi B (funktsiooni abil) ning valjastame B[0], B[1], ..., B[M] ekraani; */
		
		createArray(M, P, A);

		printf("\nOK");
		
	}

Тут, наверное, главное заметить, что когда функции передаёшь массивы, то ты на самом деле передаёшь функции только указатель на первый элемент массива.

Сообщение изменено: Firelord (18 февраля 2007 - 12:54 )

  • 0
Материалы для студентов с курса системотехники (IASB/IASM): http://starspirals.net/ttu/

#19 Infern0

Infern0
  • Постоялец
  • 1 103 сообщений
  • Откуда:Tallinn,Lasna / TTU

Отправлено 18 февраля 2007 - 14:52

блин ето похоже нада садится и читать ету книгу про си ... без нее не обойтись , особенно когда уже она чтото говорила про typedef и struct ...
  • 0
My TUT/TTÜ docs: http://goo.gl/FTSZy

#20 Firelord

Firelord
  • Постоялец
  • 854 сообщений
  • Откуда:Таллинн

Отправлено 19 февраля 2007 - 02:02

Inferno,

давно пора. Если надо, у меня на сайте есть учебник по Си от его создателей.
  • 0
Материалы для студентов с курса системотехники (IASB/IASM): http://starspirals.net/ttu/

#21 Infern0

Infern0
  • Постоялец
  • 1 103 сообщений
  • Откуда:Tallinn,Lasna / TTU

Отправлено 19 февраля 2007 - 13:31

Ричи и кериган чтоли ? так я его взял уже в библиотреке )
  • 0
My TUT/TTÜ docs: http://goo.gl/FTSZy

#22 Firelord

Firelord
  • Постоялец
  • 854 сообщений
  • Откуда:Таллинн

Отправлено 19 февраля 2007 - 23:16

Да, он самый. Только в HTML.

Мне, например, удобнее работать, когда учебник перед глазами на мониторе :)

Точно такими же принципами я руководствуюсь, когда на PHP скрипты пишу.
  • 0
Материалы для студентов с курса системотехники (IASB/IASM): http://starspirals.net/ttu/

#23 Infern0

Infern0
  • Постоялец
  • 1 103 сообщений
  • Откуда:Tallinn,Lasna / TTU

Отправлено 19 февраля 2007 - 23:27

Firelord, не , мне нравится когда всотаки можно книжку спокойно почитать на диване :)
хмм , а без уклазателей реально ли мой вариант доделать ?
  • 0
My TUT/TTÜ docs: http://goo.gl/FTSZy

#24 Firelord

Firelord
  • Постоялец
  • 854 сообщений
  • Откуда:Таллинн

Отправлено 20 февраля 2007 - 09:41

Реально, хотя я и не уверен, что именно нужно КГ; однако мой вариант прокатил.

Я думаю, что лучше сделать с указателями, это пригодится потом обязательно.
  • 0
Материалы для студентов с курса системотехники (IASB/IASM): http://starspirals.net/ttu/

#25 Infern0

Infern0
  • Постоялец
  • 1 103 сообщений
  • Откуда:Tallinn,Lasna / TTU

Отправлено 24 февраля 2007 - 18:52

вообшем не знаю где была моя ошибка , но прогу я переписал и всё работает без указателей.
#include <stdio.h>
#define L 15
double count_mass(double x,int i)
{
	   double A[L];
	   if (i==0)
		  A[i]=x;
	   else
	   A[i]=pow(x,2*i+1)/(2*i+1);
	   return A[i];
}

main()
{
	  //Ishodnye dannye
	  int i,n;
	  double x,e,A[L];
	  
	  //Vvod dannyh
	  /*  X  */
	  do{
			 printf("Vvedite x:[ |x|>1 ]\n");
			 scanf("%lf", &x);
		}
	  while (fabs(x)<=1);
	  /*  E  */
	  do{
		  printf("Vvedite e:[ 0<e<1 ]\n");
		  scanf("%lf", &e);
		}
	  while (e<=0 || e>=1);
	  //Zapolnenie massiva
	  n=0;
	  for (i=0; i<L;i++ & n++)
	  {
			  A[i]=count_mass(x,i);
			  if (fabs(A[i]-A[i-1])<=e) break;
	  }
	  //Vyvod elementov & kolichestvo
	  for (i=0; i!=n; i++)
	  {
		  printf("A[%2d] = %.2f;\n", i, A[i]);
	  }
	  printf("\n\nVsego elementov: %2d\n\n",n);
	  if (i!=L)
	  printf("\nA(%2d) Udovoletvorjaet uslovie: |A(i)-A(i-1)|<=e\n", n+1);
system("pause");
}
можно закрыть если не возрожаете :)
Прога & JSP

Сообщение изменено: Infern0 (02 марта 2007 - 15:36 )

  • 0
My TUT/TTÜ docs: http://goo.gl/FTSZy