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

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

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

Помогите подкорректировать! - C++

28.12.2008, 14:34. Просмотров 466. Ответов 1
Метки нет (Все метки)

Код
//---------------------ZADANIE -------------------------
//	Dany natural'noe chislo N, deystvitel'nye chisla
//	a[1], ... , a[n]. Poluchit' max (a[1],...,a[n]) 
//	Vi4islit' (a[1]^2+...+a[n]^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 ("\nDo you want to continue?(Y/N)\n");
	   ch = toupper(_getch());
     }
	while (ch != 'N');

  printf("\n");
  printf("\n");
  printf("                       <<<Rabota programmy zavershena>>>");
  

  _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("\nN = %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)
{
	int G=0;
	for (int F=0, i = 0; i <N; i++)							//нахождение максимального элемента
	{
		if ((a[i]) > (a[nmax])) nmax= i;								
							
		
		
	}
	for (int i=0; i<N;i++)
	{
	F+=(a[i] * a[i]);
	
	}
	printf("\n\nznachenie max elementa = ");
	printf("%5.2f",a[nmax]); 
	printf("\n\nvi4islenie zna4enija funkcii");
	printf("\n F = " );
	printf("%d", 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+3))&&(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);
}
нужно при вводе элементов массива увеличит колличество вводимых символов (вводится 5, нужно хотя бы 10)
и еще если я ввожу точк или число е,затем удаляю, оно больше не вводится:'(
ПОМОГИТЕ ПОЖАЛУЙСТА!
0
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
28.12.2008, 14:34
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Помогите подкорректировать! (C++):

Помогите подкорректировать программу - C++
Задание: Составить программу, которая содержит текущую информацию о заявках на авиабилеты. каждая заявка включает: - пункт...

Подкорректировать программу - C++
Нужно было реализовать один из алгоритмов факторизации. Взял простой метод перебора возможных делителей. Также была задача оптимизировать...

Подкорректировать программу - C++
Помогите в данной програме сделать так чтобы выводило нормально результат вычисление матрицы и помогите найти её найменьший элемент всех...

Подкорректировать программу! - C++
Ребят помогите пожалуйста! нужно немного изменить код! Вот начальный код: #include &lt;iostream&gt; #include &lt;string&gt; #include &lt;conio.h&gt; ...

Требуется подкорректировать программу - C++
#include &lt;iostream&gt; using namespace std; class phone_name { char name; long int phone; public: void set_phone() { long...

подкорректировать программу со строками - C++
#include &lt;string&gt; #include &lt;iostream&gt; int main() { std::string vowel = &quot;AaEeIiOoUuYy&quot;; std::string str; ...

Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
accept
4822 / 3243 / 165
Регистрация: 10.12.2008
Сообщений: 10,682
29.12.2008, 00:13 #2
там N=3 её нужно сделать 9
а не удаляется из-за cntPtr=0, cntE=0, cntNeg=0, т.к. обратной операции не предусмотрено
лучше поискать другое хорошее решение для всей задачи
0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
29.12.2008, 00:13
Привет! Вот еще темы с ответами:

Подкорректировать код (сортировка распределением) - C++
Вечер добрый, знатоки. Компилятор ошибку не отлавливает. Ошибка логическая и вылет программы происходит при входе в цикл: while (j &gt; (l...

подкорректировать код (найти ошибки) - C++
программа должна найти первые буквы слов. Проблема заключается в цикле. Не пойму как сделать чтоб работала правильно #include&lt;iostream.h&gt;...

Вычисление sin. Подкорректировать код. - C++
#include &quot;stdafx.h&quot; #include &quot;conio.h&quot; #include &lt;iostream&gt; #include &lt;math.h&gt; #include &lt;iomanip&gt; using namespace std; const int...

Можете немного подкорректировать код? - C++
Данная программы выводит на экран такой треугольник: 1 12 123 1234 ... 1234..n


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

Или воспользуйтесь поиском по форуму:
Ответ Создать тему
Опции темы

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