Форум программистов, компьютерный форум CyberForum.ru

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
Monmorensi
0 / 0 / 0
Регистрация: 08.12.2008
Сообщений: 21
#1

Помогите! - C++

24.12.2008, 20:17. Просмотров 477. Ответов 2
Метки нет (Все метки)

Считает правильно, а выводит не правильно, Почему??


Код
#include "stdafx.h"
#include <conio.h>
#include <stdio.h>
#include <stdlib.h>
#include <malloc.h>
#include <ctype.h>
#include <math.h>

void vvod(int N, float *a);
int uslovie(int N, float *a, int nmax, int F);
float zashita (int min,int max);

int main()
{
const int maxNat=1000;	//ограничение на ввод количества элементов массива
  float *a;
  int N,F=0,nmax=0;

char ch;
	printf("\n---------------------ZADANIE -------------------------\n");
	printf("\nDany natural'noe chislo N, deystvitel'nye chisla");
	printf("\n a[1], ... , a[n]. Poluchit' max (a[1],...,a[n]) ");
	printf("\n          Vi4islit' (a[1]^2+...+a[n]^2)");
	printf("\n");
	printf("------------------------------------------------------");
 
	do
	{
	   printf("\n");
	   do
	   {
	       printf ("\nVvedite razmer massiva N(1 ... %d)=",maxNat);		
		  N=zashita(1,maxNat);
		  if(N>maxNat)
		  {
		  	printf("\nVi vveli nepravil'noe chislo.");
			printf("\nNazhmite na lubuy klavishu.");
			_getch();
		  }
	   }
	   while (N>maxNat);


   a=(float*)malloc(N*sizeof(float));
	   

	   vvod( N, a);
	   uslovie( N, a,nmax,F);


		
   
   printf("\n");
	   printf ("Do you want to continue?(Y/N)\n");
	   ch = toupper (_getch ());
     }
	while (ch != 'N');

  printf("\n");
  printf("\n");
  printf("                       <<<Rabota programmy zavershena>>>");
  printf("\n-------------------------------------------------------");
  printf("\n                Rabotu vypolnila studentka gruppy PS-11");
  printf("\n                                       Skopina Kristina");
  printf("\n");

  _getch();
}

/////////////////////////// ВВОД МАССИВА //////////////////////////

void vvod(int N, float *a)
{
  const float maxInt=(3.4e38);
  int i;

  printf("\nVvedite elementy massiva a[%d] (-%g ...%g)", N,maxInt,maxInt);		
  for (i=0;i<N;i++)
  {
     do
     {
	   printf("\n");
	   printf("a[%d] = ",i);	
	   a[i]=zashita(-maxInt,maxInt);
	   if(a[i]<-maxInt||a[i]>maxInt)
	   {
	      printf("\nVi vveli nepravil'noe chislo.");
		 printf("\nNazhmite na lubuy klavishu.");
		 _getch();
	   }
	}
	while (a[i]<-maxInt||a[i]>maxInt);	
  }
	
  printf("\n");
  printf("N = %d",N);
  printf("\n");
  printf("\nIshodniy massiv a[%d]:",N);     //вывод заданного массива a[N]
  printf("\n");
	
  for(int i=0;i<N;i++)
  {
     printf("a[%d] = %5.2f",i,a[i]);
     printf("\n");
  }
  printf ("\n");
}



/////////////////////// УСЛОВИЕ ЗАДАНИЯ /////////////////////////////

int uslovie(int N, float *a,int nmax, int F)
{
	
	for (int F=0, i = 0; i <N; i++)							//нахождение максимального элемента
	{
		if ((a[i]) > (a[nmax])) nmax= i;								
							
		
		
	}
	for (int i=0; i<N;i++)
	{
	F=F+(a[i] * a[i]);
	}
	printf("\n\nznachenie max elementa = ");
	printf("%5.2f",a[nmax]); 
	printf("\n\nvi4islenie zna4enija funkcii");
	printf("\n F = " );
	printf("%5.2f", F);


return 0;
}

////////////////////////// ФУНКЦИЯ ЗАЩИТЫ ///////////////////////////

float zashita(int min,int max)
{
	const int N=3;
	char ch;
	char str[100], str1[100];

	int i=0, cntPtr=0, cntE=0, cntNeg=0;

	do
	{
		ch=(char)_getch();
		
		if((ch=='-')&&(cntNeg==0)&& min!=1)		// '-'
		{
			str[i++]=ch;
			putch(ch);
			cntNeg++;
		}

		

		if((ch=='e'||ch=='E')&&(cntE==0)&& min!=1)		// 'e'
		{
			str[i++]=ch;
			putch(ch);
			cntE++;
		}
		
		if((ch=='.')&&(i>0)&&(!cntPtr)&& min!=1)		// '.'
		{
			str[i++]=ch;
			putch(ch);
			cntPtr++;
		}
		
		if((ch>='0')&&(ch<='9'))			// 
		{
			str[i++]=ch;
			putch(ch);
		}
		
		if((ch=='\b')&&(i>0))				// работа BackSpace
		{
			i--;
			printf("\b \b");
		}		
						if((i==(N+1))&&(i>0)&&(min==1)||(i==(N+2))&&(i>0)&&(min!=1))
		{
			i--;
			printf("\b \b");
		}
	}
	while(ch!='\r');
	

		str[i]='\0';			//преобразование числа с е в float
		bool f=0;
		for(int k=0;k<i;k++)
			if(str[k]=='e')
			{
				f=1;
				break;
			}
		if(f)
		{
			float bas=1,
			      degree=0;
			int k=0;

			while(str[k]!='e')
			{
				str1[k]=str[k];
				k++;
			}
			str1[k]='\0';
			bas=atof(str1);	

		

if(!bas)bas=1;			
k++;
			int k1=0;
			while(str[k]!='\0')
			{
				str1[k1]=str[k];
				k++;
				k1++;
			}
			str1[k1]='\0';
			degree=atof(str1);
			return(bas*pow(10,degree));
		}
		
		for(int j=i;j>0;j--)
			printf("\b\b");
		printf("%d",atof(str));
		return atof(str);
}
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
24.12.2008, 20:17     Помогите!
Посмотрите здесь:

Помогите C++
C++ помогите с
Помогите !!!! C++
помогите! C++
C++ помогите)
помогите C++
C++ помогите
C++ ПОМОГИТЕ С++
C++ помогите
C++ Помогите
C++ помогите!

Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
XuTPbIu_MuHTAu
Эксперт С++
2222 / 737 / 10
Регистрация: 27.05.2008
Сообщений: 1,508
24.12.2008, 20:50     Помогите! #2
Почему в функции uslovie числа квадрат числа дробной записывается в целую переменную? Да и выводится она как дробное. Исправьте тип. Так же не ясно,зачем вообще F передавать,F = 0 и не менялась.Если я не пропустил ничего.
Monmorensi
0 / 0 / 0
Регистрация: 08.12.2008
Сообщений: 21
25.12.2008, 00:52  [ТС]     Помогите! #3
Cпасибо!Уже сама поняла)
Yandex
Объявления
25.12.2008, 00:52     Помогите!
Ответ Создать тему
Опции темы

Текущее время: 05:47. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru