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

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

Добавлено: 23 июн 2009, 13:58
Airhand
Да если бы я еще знал Как :) было бы великолепно, но я не знаю :(
Подключить хидеры - это значит написать #include соответсвующего хидера. Только будь осторожным: <*> и <*.h> - это разные хидеры.

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

Добавлено: 23 июн 2009, 14:16
dummie
ясно, а какие именно хидеры подключать надо? Ну кроме уже подключенных

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

Добавлено: 23 июн 2009, 14:55
Albor
Подключаешь time.h, вместо randomize(); делаешь вызов srand(time(0)); один раз в ф-ции main() и больше ни где не вызываешь, вместо random(10)-5; используешь rand()%10-5; ( от -5 до 4 включительно. Если не так то пишешь как нужно). clrscr(); меняешь на system("cls"); Вот, вроде и всё.

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

Добавлено: 23 июн 2009, 15:15
dummie
Что-то всё равно не получается (
добавил <time.h> rand и system("cls") сё равно не распазнаёт
P.S. Спасибо
--------------------------------------------------------------------------------
Добавлено сообщение
--------------------------------------------------------------------------------
Ура количество ошибок уменьшилос! :) Мерси боку :) (была не правильно подключена 1на библиотека) сейчас проблема с getch(); и еще непонятные мне ошибки.
Скрин ниже
http://depositfiles.com/files/0ydx8rp2d

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

Добавлено: 23 июн 2009, 16:07
Albor
6-я студия компилирует твой код. Судя по скрину у тебя 2005-2008 студия. Нужно смотреть MSDN по поводу getch(), может её назвали как-то иначе. Замени её на system("pause");, она в этом смысле там используется наверное.

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

Добавлено: 23 июн 2009, 16:18
dummie
Albor писал(а):6-я студия компилирует твой код. Судя по скрину у тебя 2005-2008 студия. Нужно смотреть MSDN по поводу getch(), может её назвали как-то иначе. Замени её на system("pause");, она в этом смысле там используется наверное.
У меня 2005 студия.
На getch больше не ругается но осталась 1на ошибка и 3 предупреждения :(
вот скрин:
http://rapidshare.com/files/247718705/1oshibka.JPG.html
помоги пожалуйста разобратся
н всякий случай кидаю "доработанный код

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

#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(0);
    }
    default:
    {
      cout<<"\n"<<"No such comand";
      system("pause");
      break;
    }
  }
  }
  while(comand!=5);
}
Кстати еще 1н вопрос а system("pause") это не тоже самое что cin.get() ?

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

Добавлено: 23 июн 2009, 18:28
Albor
напиши просто return; без (0) . Ворнинги из-за того, что компилятор видит неявное приведение типа из int в float, если криминала в потере точности нет, то можешь оставить так, а можешь явно привести к типу float:

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

sign=(float)*(mas+i);
--------------------------------------------------------------------------------
Добавлено сообщение
--------------------------------------------------------------------------------
В case 1 rand(); лишняя, вообще убери её и delete вызывай без [].
--------------------------------------------------------------------------------
Добавлено сообщение
--------------------------------------------------------------------------------
dummie писал(а):Кстати еще 1н вопрос а system("pause") это не тоже самое что cin.get() ?
Нет, system("pause") просто ждёт нажатия любой кнопки и не даёт закрыть консоль.

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

Добавлено: 23 июн 2009, 21:33
Romeo
&quot писал(а):Ага у прототипа int main(какие-то параметры).
Хоть бы код глянул для начала. Вообще-то там void. Невнимательность у тебя хроническая :)

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

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

Добавлено: 24 июн 2009, 11:59
Airhand
Romeo писал(а):Хоть бы код глянул для начала. Вообще-то там void. Невнимательность у тебя хроническая :)
Это у тебя невнимательность хроническая: в VS, при создании консоли, шаблон int _tmain(...

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

Добавлено: 24 июн 2009, 13:13
Romeo
Airhand, ну ты упёртый. Код смотри, говорю тебе! Какая разница что студия генерирует, ТЫ КОД СМОТРИ! И переписку читай. Человек пробовал return 0, как посоветовал ты, у него ругалось и ему исправили на return, а ты всё продолжаешь спорить. Читай каждое слово или каждую букву, если по словам уловить не получается.

dummie, справился с последней ошибкой?