Страница 3 из 4

Re: код из Borland перевести для Visual Studio 2005

Добавлено: 24 июн 2009, 16:48
Airhand
Romeo писал(а):Airhand, ну ты упёртый. Код смотри, говорю тебе! Какая разница что студия генерирует, ТЫ КОД СМОТРИ! И переписку читай. Человек пробовал return 0, как посоветовал ты, у него ругалось и ему исправили на return, а ты всё продолжаешь спорить. Читай каждое слово или каждую букву, если по словам уловить не получается.
Ты хоть раз признай, что ты тоже можеш ошибаться. Причём тут код до того, что шаблон в студии int _tmain(... Я посмотрел на шаблон в студии ещё раз и убедился в том, что он возвращает int, а ты споришь. Тогда не приплетай к спору генеруемый код, спор был о другом. Не надо говорить про код в споре про шаблон. - :)

Re: код из Borland перевести для Visual Studio 2005

Добавлено: 24 июн 2009, 18:53
dummie
Доброго времени суток!!!
Извиняюсь что так долго не выходил на связь, не было возможности.
Программа Заработала!!! С ворнингами, но заработала, там осталось типы превести, сейчас этим займусь. Последняя проблема была именно в return
Хочу выразить благодарность всем кто откликнулся на мой "крик" о помощи и помог мне справится с этой нелёгкой задачей.
Особенно хочу погладарить Dekodera который выслал на почту работающий код, задачу он решил совершенно по другому, я выложу код что бы была возможность посмотреть.
Albor который очень помог с нашим общим методом, ну и всех всех.
Перечислять не буду, имена их известны :D

Re: код из Borland перевести для Visual Studio 2005

Добавлено: 24 июн 2009, 18:55
dummie
Это рабочий код который сделали мы, наслучай если кому интерестно

Код: Выделить всё

#include <conio.h>
#include <stdlib.h>
#include <stdafx.h>
#include <time.h>
#include <iostream>
using namespace std;
//------------------------
void avarage_before_neg(int *mas, int el)
//в функцию передается массив mas и количество элементов el
{
  int i, neg_pos=-1, count=0;
  float  avarage=0;
  for (i=0; i<el; i++)   //цикл определения позиции первого отрицательного
  if (*(mas+i)<0)
  {
    neg_pos=i;           //запись позиции отрицательного
    break;
  }
  //если отрицательных чисел нет - сообщяем
  if (neg_pos==-1) cout<<"\n"<<"No negative in array";
  //в другом случае подсчитываем количество и сумму
  else
  {
    for (i=0; i<neg_pos; i++)
    {
      avarage+=*(mas+i);
      count++;
    }
    if (count!=0) avarage=avarage/count;
    cout<<"\n"<<"Avarage value of elements before first negative = "<<avarage;
    cout<<"\n"<<"Element count before first negative = "<<count;
  }
}

void left_min (int *mas, int el)
//в функцию передается массив mas и количество элементов el
{
  int i, min=1000, mpos=-1;
  float sum_min=0, prod_min=1, ratio=0;
  //цикл для нахождения позиции минимального элемента
  for(i=0; i<el; i++)
  if (*(mas+i)<min)
  {
    min=*(mas+i);
    mpos=i;
  }
  //цикл для подсчета суммы и произведения
  for(i=0; i<mpos; i++)
  {
    sum_min+=*(mas+i);
    prod_min*=*(mas+i);
  }
  //если произведение равно 0 перехватываем ошибку
  if (prod_min==0) cout<<"Devision by zero";
  //в другом случае выводим результат на экран
  else
  {
    ratio=sum_min/prod_min;
    cout<<"\n"<<"Ratio between summ and product before minimum element = "<<ratio;
  }
}

void print_mas (int *mas, int el)
//в функцию передается массив mas и количество элементов el
{
  int i;
  for (i=0; i<el; i++)
  {
    cout<<*(mas+i)<<"\t";
  }
}

void sign_mas(int *mas, int el, int *mas2, int *el2)
//в функцию передается массивы mas и mas2
// и количество элементов в первом массиве el и во втором - el2
{
  int i, element=0;
  float sign=0;
  //цикл для обнуления второго массива
  for (i=0; i<el; i++)
  *(mas2+i)=0;
  sign=*(mas+0);
  if (sign==0) sign=1;
  //цикл для создания второго массива
  for (i=0; i<el; i++)
  {
    //если знаки одинаковы то суммируем
    if (*(mas+i)/sign>=0) *(mas2+element)+=*(mas+i);
    //в другом случае создаем новый элемент во втором массиве
    else if (*(mas+i)/sign<0)
    {
      element++;
      sign=*(mas+i);
      if (sign==0) sign=1;
      *(mas2+element)+=*(mas+i);
    }
  }
  *el2=element+1;
}

void main()
{
  int el, el2, i, comand;
  cout<<"Type array size =";
  cin>>el;
  int* mas = new int[el];         //создание двух динамических массивов
  int* mas2 = new int[el];
  srand(time(0)); 
  for (i=0; i<el; i++)
  mas[i]=rand()%10-5;
  do
  {
  system("cls");
  cout<<"Choose comand:";
  cout<<"\n"<<"1. Change array size";
  cout<<"\n"<<"2. Find avarege and count before first negative";
  cout<<"\n"<<"3. Find ratio between summ and product of elements before first negative";
  cout<<"\n"<<"4. Crate massive with near elements with same sign";
  cout<<"\n"<<"5. Exit"<<"\n";
  cin>>comand;
  switch (comand)
  {
    case 1:             //первый пункт меню
    {
     system("cls");
      delete[] mas;
      delete[] mas2;
      cout<<"Type array size =";
      cin>>el;
      int* mas = new int[el];
      int* mas2 = new int[el];
      rand();
      for (i=0; i<el; i++)
      mas[i]=rand()%10-5;
      break;
    }
    case 2:              //второй пункт меню
    {
      system("cls");
      cout<<"Array:"<<"\n";
      print_mas(mas, el);
      avarage_before_neg(mas, el);
      system("pause");
      break;
    }
    case 3:              //третий пункт меню
    {
      system("cls");
      cout<<"Array:"<<"\n";
      print_mas(mas, el);
      left_min(mas, el);
      system("pause");
      break;
    }
    case 4:                //пчетвертый пункт меню
    {
      system("cls");
      cout<<"Array:"<<"\n";
      print_mas(mas, el);
      sign_mas(mas, el, mas2, &el2);
      cout<<"\nCreated array:"<<"\n";
      print_mas(mas2, el2);
      system("pause");
      break;
    }
    case 5:                  //выход
    {
      delete[] mas;
      delete[] mas2;
      return;
    }
    default:
    {
      cout<<"\n"<<"No such comand";
      system("pause");
      break;
    }
  }
  }
  while(comand!=5);
}



Re: код из Borland перевести для Visual Studio 2005

Добавлено: 24 июн 2009, 18:58
dummie
А вот это код который сделал Decoder(придётся разбить на 2 части)

Код: Выделить всё

// BcToVc.cpp : Defines the entry point for the console application.
//

#include "stdafx.h"
#include <conio.h>
#include <iostream>
#include <stdlib.h>
#include <time.h>

using std::cin;

#ifdef _UNICODE
#define _tcout std::wcout
#else
#define _tcout std::cout
#endif

BOOL clrscr();

void randomize()
{
	srand((unsigned)time(NULL));
}

int random(int n)
{
	return rand()%n;
}
//------------------------
void avarage_before_neg(int *mas, int el)
//в функцию передается массив mas и количество элементов el
{  
	int i, neg_pos=-1, count=0;  
	float  avarage=0;  
	for (i=0; i<el; i++)   //цикл определения позиции первого отрицательного  
		if (*(mas+i)<0)  
		{    
			neg_pos=i;           //запись позиции отрицательного    break;  
		}  
	//если отрицательных чисел нет - сообщяем  
	if (neg_pos==-1) 
		_tcout << _T("\n") << _T("No negative in array");  //в другом случае подсчитываем количество и сумму  
	else  
	{    
		for (i=0; i<neg_pos; i++)    
		{      
			avarage+=*(mas+i);      
			count++;    
		}    
		if (count!=0) 
			avarage=avarage/count;    
		_tcout << _T("\n") << _T("Avarage value of elements before first negative = ") << avarage;    
		_tcout << _T("\n") << _T("Element count before first negative = ") << count;  
	}
}

void left_min (int *mas, int el)//в функцию передается массив mas и количество элементов el
{  
	int i, min=1000, mpos=-1;  
	float sum_min=0, prod_min=1, ratio=0;  //цикл для нахождения позиции минимального элемента  
	for(i=0; i<el; i++)  
		if (*(mas+i)<min)  
		{    
			min=*(mas+i);    
			mpos=i;  
		}  //цикл для подсчета суммы и произведения  
	for(i=0; i<mpos; i++)  
	{    
		sum_min+=*(mas+i);
		prod_min*=*(mas+i);  
	}  //если произведение равно 0 перехватываем ошибку  
	if (prod_min==0) 
		_tcout << _T("Devision by zero");  //в другом случае выводим результат на экран  
	else  
	{    
		ratio=sum_min/prod_min;    
		_tcout << _T("\n") 
			<< _T("Ratio between summ and product before minimum element = ") 
			<< ratio;  
	}
}

void print_mas (int *mas, int el)
//в функцию передается массив mas и количество элементов el
{  
	int i;  for (i=0; i<el; i++)  
	{    
		_tcout<<*(mas+i)<< _T("\t");  
	}
}

void sign_mas(int *mas, int el, int *mas2, int *el2)
	//в функцию передается массивы mas и mas2
	// и количество элементов в первом массиве el и во втором - el2
{  
	int i, element=0;  
	float sign=0;  
	//цикл для обнуления второго массива  
	for (i=0; i<el; i++)  
		*(mas2+i)=0;  
	sign=(float)*(mas+0);  
	if (sign==0) 
		sign=1;  
	//цикл для создания второго массива

Re: код из Borland перевести для Visual Studio 2005

Добавлено: 24 июн 2009, 18:59
dummie

Код: Выделить всё

for (i=0; i<el; i++)  
	{    //если знаки одинаковы то суммируем    
		if (*(mas+i)/sign>=0) 
			*(mas2+element)+=*(mas+i);    
		//в другом случае создаем новый элемент во втором массиве    
		else if (*(mas+i)/sign<0)    
		{      
			element++;      
			sign=(float)*(mas+i);      
			if (sign==0) 
				sign=1;      
			*(mas2+element)+=*(mas+i);    
		}  
	}  
	*el2=element+1;
}

int _tmain(int argc, _TCHAR* argv[])
{  
	int el, el2, i, comand;  
	_tcout << _T("Type array size = ");  
	cin >> el;  
	int* mas = new int[el];         //создание двух динамических массивов  
	int* mas2 = new int[el];
	randomize();
	for (i=0; i<el; i++)  
		mas[i]=random(10)-5;  
	do  {  
		clrscr();  
		_tcout << _T("Choose comand:");  
		_tcout << _T("\n") << _T("1. Change array size");  
		_tcout << _T("\n") << _T("2. Find avarege and count before first negative");  
		_tcout << _T("\n") << _T("3. Find ratio between summ and product of elements before first negative");  
		_tcout << _T("\n") << _T("4. Crate massive with near elements with same sign");  
		_tcout << _T("\n") << _T("5. Exit") << _T("\n");  
		cin >> comand;  
		switch (comand)  
		{    
		case 1:             //первый пункт меню    
		{      
			clrscr();      
			delete[] mas;      
			delete[] mas2;      
			_tcout << _T("Type array size =");      
			cin >> el;      
			mas = new int[el];      
			mas2 = new int[el];
			randomize();
			for (i=0; i<el; i++)      
				mas[i]=random(10)-5;      
			break;    
		}    
		case 2:              //второй пункт меню    
			{      
				clrscr();      
				_tcout << _T("Array:") << _T("\n");      
				print_mas(mas, el);      
				avarage_before_neg(mas, el);      
				_gettch();      
				break;    
			}    
		case 3:              //третий пункт меню    
			{      
				clrscr();      
				_tcout << _T("Array:") << _T("\n");      
				print_mas(mas, el);      
				left_min(mas, el);      
				_gettch();      
				break;    
			}    
		case 4:                //пчетвертый пункт меню    
			{      
				clrscr();      
				_tcout << _T("Array:") << _T("\n");      
				print_mas(mas, el);      
				sign_mas(mas, el, mas2, &el2);      
				_tcout << _T("\nCreated array:") << _T("\n");      
				print_mas(mas2, el2);      
				_gettch();      
				break;    
			}    
		case 5:                  //выход    
			{      
				delete[] mas;      
				delete[] mas2;      
				exit(0);    
			}    
		default:    
			{      
				_tcout << _T("\n") << _T("No such comand");      
				_gettch();      
				break;    
			}  
		}  
	}  while(comand!=5);
	return 0;
}

static HANDLE _ConsoleOut = ::GetStdHandle(STD_OUTPUT_HANDLE); 

BOOL clrscr() 
{ 
    COORD cr = {0, 0}; DWORD dw(0);
    CONSOLE_SCREEN_BUFFER_INFO csbi = {0}; 
    ::GetConsoleScreenBufferInfo(_ConsoleOut, &csbi); 
	::SetConsoleCursorPosition(_ConsoleOut, cr);
    return ::FillConsoleOutputCharacter(_ConsoleOut, ' ',
            csbi.dwSize.X * csbi.dwSize.Y, cr, &dw); 
}

Re: код из Borland перевести для Visual Studio 2005

Добавлено: 24 июн 2009, 19:01
Romeo
Airhand, я всегда признаю, когда я ошибаюсь, но это не тот случай, когда я не прав.

Всё верно, студия генерирует именно такой код. Я с этим не спорю. Вот только то, что генерирует студия к делу не относить СОВСЕМ. Мы исправляем тот код, который нам предоставил dummie. Именно этот код я тебя и призывал посмотреть БОЛЬШИМИ БУКВАМИ. Посмотри же на него хоть раз и тогда ты увидишь, в этом коде :

Код: Выделить всё

void main()
{
   ...
}
Для такой формы main мы должны писать return, иначе код не будет собираться. И, более того, эта форма вполне допустима. Если бы ты хоть раз внимательно прочитал то, что тут пишут, а самое главное осознал то, что пишут, то ты бы наконец-то перестал вести бесцельные споры. Три сообщения назад Albor уже исправил твою ошибку и dummie уже успел всё скомпилировать, а ты по-прежнему продолжаешь доказывать то, что никто даже под сомнение не ставил, но что АБСОЛЮТНО не относится к делу. Видимо, ты получаешь какое-то скрытое удовольствие от этого процесса.
--------------------------------------------------------------------------------
Добавлено сообщение
--------------------------------------------------------------------------------
dummie, а почему возвращаемое значение передал? Так удобнее?

Re: код из Borland перевести для Visual Studio 2005

Добавлено: 24 июн 2009, 19:28
dummie
В смысле передал возвращаемое значение?

Re: код из Borland перевести для Visual Studio 2005

Добавлено: 24 июн 2009, 19:38
Romeo
Нет, изменил возвращаемое значение функции main. Раньше она у тебя возвращала void. Сейчас возвращает int. Если переделал возвращаемое значение, то теперь конечно следует писать return 0, просто интересно зачем поменял. Или Decoder так прислал, а ты просто выложил? :)

Re: код из Borland перевести для Visual Studio 2005

Добавлено: 24 июн 2009, 19:48
dummie
А ты про 2й вариант. Я просто выложил если кому вдруг интерестно будет. Сам в этот вариан сильно не вникал, потому как ничего понять там не могу. Мне ближе наш вариант, тут я хоть что то понять могу :)

Re: код из Borland перевести для Visual Studio 2005

Добавлено: 24 июн 2009, 19:56
Romeo
Да, я про второй. Ну ОК, если начальный вариант работает, то всё гуд :)