1 Востаннє редагувалося КиївОболонь (16.12.2015 18:43:46)

Тема: Викрутаси компілятора Turbo C++ IDE

Ситуація така - на робочому ПК деколи буває таке, що запускаєш програму, а вона не запускається (не пише ніяких помилок, програма правильна, а просто як ніби ігнорує запуск. Деколи ще можна встигнути побачити як проскакує швиденько Saving Desktop File, а далі таке враження, що і не запускав програму). При цьому якщо запустити іншу програму, то вона може і запуститься(якщо буде мати бажання). Компілятор стоїть на віртуальній машині і найцікавіше те, що навіть після перезавантаження віртуальної, програма буде продовжувати робити "своє".
Ну і ще 1 глюк. Ця ж програма розроблена на домашньому ПК(вдома звісно ж запускається) в середовищі Turbo C++4.0 на тому ж робочому ПК працює некоректно (якщо вдасьтся включити ПК так щоб програма все ж таки запустилася, ну або ж якщо натиснути User Screen). Наприклад, 1 з функцій програми - відємні числа множити самі на себе для отримання їх квадратів (для цього використовується header, але наробочому ПК компілятор чомусь не реагує на те, що я йому наказав підносити всі відємні числа до квадрату.
Що це може бути (з ПК, компілятором або, може, з програмою)?

2

Re: Викрутаси компілятора Turbo C++ IDE

Ось сама програма

#include<stdio.h>
#include<conio.h>
#include<stdlib.h>
#include<iostream.h>
#include"header8.h"
void main()
{
clrscr();randomize();
const int k=10;
int n[k];
int kve=0,min=100,nmin;
int sm=0,tmp;
vvid(n,k);
vuv(n,k);
kv(n,kve,k);
smel(n,min,k,nmin,sm);
kvadro(n,k);
cout<<"\nVidsortovanui masuv:"<<"\n";
sort(n,k,tmp);
vuv(n,k);
getch();
}

3 Востаннє редагувалося КиївОболонь (16.12.2015 18:43:19)

Re: Викрутаси компілятора Turbo C++ IDE

А ось Хеадер

Прихований текст
#include<iostream.h>
#include<conio.h>
#include<stdio.h>
#include<math.h>

void vvid(int n[10],int k)
{
for(k=0;k<10;k++)
n[k]=random(2900)%100-50;
}

void vuv(int n[10],int k)
{
for(k=0;k<10;k++)
cout<<n[k]<<"\t";
}

void kv(int n[10],int kve,int k)
{
for(k=0;k<10;k++)
if(n[k]<0)
kve+=1;
cout<<"\nkilk videmnih elem="<<kve;
}

void smel(int n[10],int min,int nmin,int k,int sm)
{
for(k=0;k<10;k++)
if(fabs(n[k])<fabs(min)){
min=fabs(n[k]);
nmin=k;                 }
for(k=nmin+1;k<10;k++)
sm+=fabs(n[k]);
cout<<"\nminim za modylem elem="<<min;
cout<<"\nsuma modyliv elem,rozmishenuh pisla minim za modylem="<<sm<<"\n";
}

void kvadro(int n[10],int k)
{
for(k=0;k<10;k++){
if(n[k]<0)
n[k]=n[k]*n[k];
cout<<n[k]<<"\t";}
}

void sort(int n[10],int k,int tmp)
{
for(int j=0;j<9;j++){
for(k=0;k<9;k++){
if(n[k]>n[k+1]){
tmp=n[k];
n[k]=n[k+1];
n[k+1]=tmp;}}}
}

If в функції Kvadro - це проблемна (для робочого компілятора) ділянка

4

Re: Викрутаси компілятора Turbo C++ IDE

компілятор чомусь не реагує

В якому розумінні не реагує? Видае помилку? Чи просто та функція не виконується?

5

Re: Викрутаси компілятора Turbo C++ IDE

Itari написав:

компілятор чомусь не реагує

В якому розумінні не реагує? Видае помилку? Чи просто та функція не виконується?

просто не виконується (ігнорує). Ну може зявитися менше ніж на 1 сек напис Saving desktop file

6

Re: Викрутаси компілятора Turbo C++ IDE

Намагався увімкнути пошаговку? Щоб провести трассування кода.

7 Востаннє редагувалося reverse2500 (16.12.2015 20:15:35)

Re: Викрутаси компілятора Turbo C++ IDE

Turbo C++ якої версії ?
далі старі obj видалені ?

8 Востаннє редагувалося cheappi386 (17.12.2015 01:53:11)

Re: Викрутаси компілятора Turbo C++ IDE

Як варіант запхати

__asm{int 3}

до проблемної ф-ції і глянути що буде.

9

Re: Викрутаси компілятора Turbo C++ IDE

Книжки по-людськи читати  не хочете, тому перебираєте варіанти -- спочатку ложку в вухо сунете, потім в сраку, а оскільки жерти все одно хочеться, то прийде пан koala і скаже що краще в рот.

Подякували: leofun011

10

Re: Викрутаси компілятора Turbo C++ IDE

Пожалійте нас, будь ласочка, форматуйте код, фукнція kvadro повинна виглядати так:

void kvadro(int n[10], int k)
{
    for(k = 0; k < 10; k++)
    {
         if(n[k] < 0)
         n[k] = n[k] * n[k];
         cout << n[k] << "\t";
    }
}

Правда я не розумію навіщо передавати k як параметр, чому не оголосити її прямо у функції? можна прямо в самому циклі:

for(int k = 0; k < 10; k++)

11

Re: Викрутаси компілятора Turbo C++ IDE

В TruboC в циклі проголошувати, здається, ще не можна було.
І

n[k] *= n[k];

же.

Подякували: Yola1

12

Re: Викрутаси компілятора Turbo C++ IDE

А я б мабудь так зробив би:

    void kvadro(int* a, int n)
    {
        for(int k = 0; k < n; k++) cout<<(n[k]*=(n[k]<0)?n[k]:1);
    }

Та виклик:

kvadro(&n,10);

13

Re: Викрутаси компілятора Turbo C++ IDE

koala написав:

В TruboC в циклі проголошувати, здається, ще не можна було.
І

n[k] *= n[k];

же.

Ну спочатку в мене так і було. Потім я змінив :D

14

Re: Викрутаси компілятора Turbo C++ IDE

Yola написав:

Правда я не розумію навіщо передавати k як параметр, чому не оголосити її прямо у функції? можна прямо в самому циклі:

for(int k = 0; k < 10; k++)

Ну можна і так! Сильної ролі на вказану поведінку компілятора це грати не буде(якщо взагалі буде)

15

Re: Викрутаси компілятора Turbo C++ IDE

0xDADA11C7 написав:

Книжки по-людськи читати  не хочете

Чому це? Тим паче що не у всіх книгах це є.

16

Re: Викрутаси компілятора Turbo C++ IDE

reverse2500 написав:

Turbo C++ якої версії ?
далі старі obj видалені ?

Версію не памятаю.
Що дає видалення?

17

Re: Викрутаси компілятора Turbo C++ IDE

Itari написав:

Намагався увімкнути пошаговку? Щоб провести трассування кода.

Ні

18

Re: Викрутаси компілятора Turbo C++ IDE

Що дає видалення?

та бувають випадки коли компіляєш, успішно, а obj файл новий не створюється, бо вже є попередньо створений від попердньої компіляції, за цього можуть і бути глюки, хоча не факт, з таким зустрічався особисто

19

Re: Викрутаси компілятора Turbo C++ IDE

reverse2500 написав:

Що дає видалення?

за цього можуть і бути глюки, хоча не факт, з таким зустрічався особисто

В тому числі і ті, що не дають програму запустити?

20

Re: Викрутаси компілятора Turbo C++ IDE

І ще 1 новина, на ноутбуці(у нього такий ж компілятор, як і на домашньому ПК) квадрати теж неадекватно працюють (хоча відмови від запуску звичайно ж немає). Хоча можливо при попередньому оголошенні всіх елементів масиву замість рандомайзу квадрати й будуть працювати