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

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

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

Программа работает по-разному на разных компах - C++

09.05.2017, 15:34. Просмотров 172. Ответов 2

Дали задание на написание небольшой программы в С++, работа с массивами. На домашнем компе работает правильно, всё выполняется.

Переношу на ноут и при выполнении вылетает ошибка сегментирования (После выполнения цикла внутри zapmas). Из-за чего это может быть?
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
#include <iostream>
#include <cmath>
 
using namespace std;
 
 
 
void Vvod(int *k, int *X, int *Y){ //Подпрограмма ввода границ и размера массива
        cout << "Введите размер массива: ";
        cin >> *k;
 
        cout << "Введите нижнюю границу Х: ";
        cin >> *X;
 
        cout << "Введите верхнюю границу Y: ";
        cin >> *Y;
 
}
 
void zapmas(int k, int B[]){ //Подпрограмма заполнения массива
        for(int i=0; i<k; i++){
                cout << "Введите B[" << i << "]: ";
                cin >> B[i];
        }
}
 
void prmas(int X, int Y, int *j, int k, int B[]){ //Подпрограмма создания массива из чисел в интервале между Х и У
        *j=0;
        for(int i=1; i<k; i++){
        if( not ((B[i] < X and B[i] > Y) or (B[i] < Y and B[i] > X)) ){
                B[i]=B[i-1];
                *j+=1;
                                                                                                                                    
        }                                                                                                                           
}                                                                                                                                   
}                                                                                                                                   
                                                                                                                                    
void findch(int B[], int k, int *indexch){ //Подпрограмма нахождения первого четного элемента в массиве                             
        int i=0;                                                                                                                    
        while(i<k){                                                                                                                 
                if((B[i]%2)==0){                                                                                                    
                        *indexch=i;                                                                                                 
                        i=k;                                                                                                        
                }                                                                                                                   
                i++;                                                                                                                                                                                                                                                         
        }                                                                                                                                                                                                                                                                    
}                                                                                                                                                                                                                                                                            
                                                                                                                                                                                                                                                                             
void findmin(int indexch, int k, int B[], int *indexmin){ //Подпрограмма нахождения минимального элемента в массиве                                                                                                                                                          
        for(int i=indexch+1; i<=k; i++){                                                                                                                                                                                                                                     
           if(B[*indexmin] >= B[i]){                                                                                                                                                                                                                                         
                   *indexmin=i;                                                                                                                                                                                                                                              
           }                                                                                                                                                                                                                                                                 
        }                                                                                                                                                                                                                                                                    
}                                                                                                                                                                                                                                                                            
                                                                                                                                                                                                                                                                             
void srarif(int indexch, int indexmin, int B[], float *sr, int *Err){ //Подпрограмма вычисляющая среднее арифметическое                                                                                                                                                      
        for(int i=indexch+1; i<indexmin; i++){                                                                                                                                                                                                                               
                *sr+=B[i];                                                                                                                                                                                                                                                   
        }                                                                                                                                                                                                                                                                      
 
        if(indexmin-1!=indexch){
                *sr /= (indexmin-indexch-1);
        }
 
        else{
                *Err = 2;
        }
}
 
int main(){
        int Err=0;
        int X;
        int Y;
        int k;
        int j;
 
        Vvod(&k, &X, &Y);
 
        int B[k];
 
        B[0]=X;
 
        zapmas(k, B);
 
        float sr=0;
        int indexmin;
        int indexch;
 
        findch(B, k, &indexch);
 
        findmin(indexch, k, B, &indexmin);
 
        srarif(indexch, indexmin, B, &sr, &Err);
 
        //Проверка ошибки
 
        if(Err==0){
        cout << "\nПервое четное число: " << B[indexch] << "\nМинимальное число после первого четного: " << B[indexmin] << "\nСреднее значениe: " << sr;  
        }
        if(Err==2){
                cout << "\nПервое четное число: " << B[indexch] << "\nМинимальное число после первого четного: " << B[indexmin] << "\nСреднее значениe не удалось вычислить, так как между четным и минимальным числами нет чисел"; 
        }
 
        prmas(X, Y, &j, k, B);
        findmin(0, j, B, &indexmin);
 
        cout << "\nМинимальное число: " << B[indexmin];
         
        return 0;
}
0
Лучшие ответы (1)
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
09.05.2017, 15:34
Я подобрал для вас темы с готовыми решениями и ответами на вопрос Программа работает по-разному на разных компах (C++):

Почему функция strchr по разному работает при разных строках? - C++
Только начал изучать С. Пользую Borland C++ v.3.1 Нужно работать со строками. Вот стандартный пример из стандартного хелпа компилятора: ...

программа работает не на всех компах - C++
Кто знает почему программа на одних компах работает на других нет? в чем может быть проблема? #include &lt;windows.h&gt; int main() { ...

Программа не работает на всех компах кроме моего - C++
Добрый день. Создал проект, программа работает нормально. Решил вытащить exe файл, чтобы скинуть проверить на других компах, ну и знакомым...

Почему в разных учебниках главная функция называется по разному? - C++
Например, иногда (без объяснения) в учебнике говорится, что, цитирую, &quot;в любой программе на C++ главная функция должна называться...

Билдер 6 сохранить с проэкт с разширением .ехе! Что бы работал как обычная программа и на др компах! - C++
Все галочки которые пологается снял в линке..и еще где то!!! Пробовал через релиз но ни---ра=))

Ошибка с циклом While. По разному работает с double и float, хотя должен бы одинаково - C++
Здравствуйте. Абсолютно не понимаю, почему double x; //--- x=0.1; while(x &lt;= 0.3) { //--- x+=0.2;

2
Mohan
72 / 37 / 16
Регистрация: 03.02.2017
Сообщений: 100
Завершенные тесты: 2
09.05.2017, 16:47 #2
Лучший ответ Сообщение было отмечено автором темы, экспертом или модератором как ответ
То, что мне удалось нарыть.
Первые две ошибки - у меня программа с ними не компилировалась.
Во-первых, строка 30, операторы not, or, and, в функции prmas() заменил на стандартные:
C++
1
if (! ((B[i] < X && B[i] > Y) || (B[i] < Y && B[i] > X))) {
Во вторых, строка 80, создание массива B[k].
Раз k не константа, то массив должен быть динамическим, поэтому:
C++
1
int *B = new int[k];
В третьих, строка 82. Какой смысл присваивать нулевому элементу массива значение (B[0]=X; ), если затем в функции zapmas(), это значение будет введено с клавиатуры?

В четвёртых, переменная indexmin не инициализирована! В строке 87 её объявление, в строке 92 передача в функцию findmin(), где она используется без инициализации.

В пятых, там же в findmin(), строка 50, выход за границу массива!
C++
1
i<=k;
2
Bitkiller3
0 / 0 / 0
Регистрация: 09.05.2017
Сообщений: 2
09.05.2017, 17:09  [ТС] #3
Воу, спасибо
Вот только теперь работает неправильно... Ладно, дальше сам попробую, спасибо за помощь
0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
09.05.2017, 17:09
Привет! Вот еще темы с ответами:

Запрос по-разному рабоает на разных компах. - C# ASP.NET
Всем привет! Вот такая проблема. Есть сайт, все работает ок, но - один из компов имеющий Win98 и IE6.0 and service pack 1 работает очень...

Одна презентация на разных компах октрывается по разному - MS Powerpoint
Презентация лежит на сетевом диске. если я её открываю, то графики нормальные А если её открыть на другом компе, то графики немного...

Приложение по разному работает на разных пк - C#
Всем доброго времени суток, нужна ваша помощь. Написал программу в которой одна из функций по таймеру(1000мс) фокусируется на приложение,...

По-разному работает на разных телефонах - Программирование Android
Делаю программу на Android Studio. И вот такая проблема, что на моём телефоне часть программы не работает, а на другом - работает. В чём...


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

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

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