Страница 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:
--------------------------------------------------------------------------------
Добавлено сообщение
--------------------------------------------------------------------------------
В case 1 rand(); лишняя, вообще убери её и delete вызывай без [].
--------------------------------------------------------------------------------
Добавлено сообщение
--------------------------------------------------------------------------------
dummie писал(а):Кстати еще 1н вопрос а system("pause") это не тоже самое что cin.get() ?
Нет, system("pause") просто ждёт нажатия любой кнопки и не даёт закрыть консоль.
Re: код из Borland перевести для Visual Studio 2005
Добавлено: 23 июн 2009, 21:33
Romeo
" писал(а):Ага у прототипа 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, справился с последней ошибкой?