Форум программистов, компьютерный форум CyberForum.ru

Найти решение - на разные темы - C++

Восстановить пароль Регистрация
 
Рейтинг: Рейтинг темы: голосов - 22, средняя оценка - 4.73
Raxxell
10 / 10 / 1
Регистрация: 27.07.2010
Сообщений: 107
18.05.2011, 08:06     Найти решение - на разные темы #1
Доброго времени суток!!!

Уважаемые форумчанины, требуется помощь в решении задач по С++. За 1,5 месяца не смог разобраться ни в одном компиляторе. У меня видимо руки не оттуда растут, или эти компиляторы слишком "умные". Под Линукс вообще не понял как компилировать. А у меня сессия через неделю, а задачи так и не решены. Как застрял на первой, так и все. На бумаге то вроде решил, а вот проверить не могу.

Листинг этой задачи привожу ниже. Но надо решить и остальные. Помогите пожалуйста.

Вот задачи:
№ 1
Код
Требования к задаче:
a. написать программу в соответствии с заданием, используя статические массивы 
b. отформатировать исходный код программы согласно требованиям к оформлению исходного кода;
c. использовать динамические массивы (размер массива вводится пользователем с проверкой ввода);
d. выявить ограничения на вводимые пользователем значения и, если таковые имеются, не допустить их ввода.
e. организовать повтор программы по желанию пользователя. 
f. реализовать меню пользователя, состоящее как минимум из 4-х пунктов: 
       a. ввод элементов массива; 
       b. обработка массива; 
       c. вывод массива на экран
       d. выход.

Задача:
1. В одномерном массиве целых чисел заменить максимальное значение минимальным.
2. Найти три наименьших положительных элементов одномерного массива целых чисел
3. 1. Заменить отрицательные элементы одномерного массива целых чисел на нули, а затем подсчитать количество нулевых элементов.
Вот мое решение первой задачи:
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
/*Задача 1
 
 В одномерном массиве целых чисел заменить максимальное значение минимальным*/
 
 
 
# include <iostream.h>
 
# include <conio.h>
 
 
 
 
 
int main() 
 
{
 
    int i; // Задаем переменную для цикла
 
    int x;
 
    cout << "Vvedite razmernost' massiva" << endl;
 
    cin >> x;
 
    int mas[x];
 
    
 
    cout << "Zapolnjaem massiv" << endl;
 
    for (i = 0; i <= x; i++) // Заполняем массив в ручную с клавиатуры
 
    {
 
        cout << "Vvedite znachenije massiva" << endl;
 
        cin >> mas[i];
 
    }
 
    int max=0, min=0;
 
    for (i = 1; i = x; i++) // Находим в массиве максимальное и манимальное значение
 
    {
 
        if (mas[i-1] < mas [i])
 
        {
 
            min = mas[i-1];
 
            max = mas[i];
 
        }
 
        else
 
        {
 
            min = mas[i];
 
            max = mas[i-1];
 
        };
 
    }
 
    for (i = 0; i <= x; i++) // Меняем максимальное значение на минимальное
 
    {
 
        if (mas[i] = max)
 
        {
 
            mas[i] = min;
 
        };
 
    }
 
    cout << "U nas poluchilsja noviy massiv" << endl;
 
    for (i = 0; i <= x; i++)
 
    {
 
        
 
        cout << mas[i]<< endl;
 
    }
 
    return 1;
 
}
№2
Код
Требования к выполнению заданий
a. написать программу в соответствии с заданием.
b. отформатировать исходный код программы согласно требованиям к оформлению исходного кода;
c. для хранения строк использовать динамические массивы символов (размер массива определять в процессе ввода);
d. организовать повтор программы по желанию пользователя. 
e. реализовать меню пользователя, состоящее как минимум из 4-х пунктов: 
         a. ввод данных; 
         b. обработка данных; 
         c. вывод результата на экран;
         d. выход.
f. Для корректной работы меню организовать промежуточное хранение результата.

Задачи:
1. Написать программу, которая будет подсчитывать количество согласных букв в строке, введенной с клавиатуры.
2. Написать программу, которая будет находить самое длинное слово в строке, введенной с клавиатуры, и подсчитывать, сколько раз оно встретилось в тексте.
№3
Код
Требования к выполнению заданий
a. написать программу в соответствии с заданием.
b. отформатировать исходный код программы согласно требованиям к оформлению исходного кода;
c. размерность массива должна определяться пользователем программы;
d. организовать повтор программы по желанию пользователя. 
e. реализовать меню пользователя, состоящее как минимум из 4-х пунктов: 
              a. ввод данных; 
              b. обработка данных; 
              c. вывод результата на экран;
              d. выход.
f. Для корректной работы меню организовать промежуточное хранение результата.

Задачи:
1. Дана целочисленная прямоугольная матрица. Определить:
a. количество столбцов, содержащих хотя бы один нулевой элемент; 
b. номер строки, в которой находится самая длинная серия одинаковых элементов.
2. Дана матрица А размера n х m. Упорядочить строки матрицы в порядке возрастания их первых элементов.

№4
Код
ребования к выполнению заданий
a. написать программу в соответствии с заданием.
b. отформатировать исходный код программы согласно требованиям к оформлению исходного кода;
c. размерность массива может определяться пользователем программы;
d. организовать повтор программы по желанию пользователя. 
e. выполнить пункты b и c
f. реализовать меню пользователя, состоящее как минимум из 4-х пунктов: 
                  a. загрузка данных из файла с возможностью выбора файла; 
                  b. обработка данных; 
                  c. вывод результата на экран;
                  d. выход.
g. Размер массива должен определяться автоматически на основе данных, находящихся в файле.
h. Для корректной работы меню организовать промежуточное хранение результата.
i. Вывод программы отсортировать в алфавитном порядке, если заданием не оговорено иное.

Задачи:
1. Написать программу, которая считывает текст из файла и записывает каждое слово в отдельный элемент массива. Вывести на экран: а) пять самых коротких слов, б) слова, встречающиеся в тексте более 1 раза, отсортировав по алфавиту.
2. В файле хранятся названия фильмов. Каждая строка отдельное название. Написать программу, которая читает строки из файла в массив строк, и выводит на экран названия фильмов, отсортировав их а) по убыванию количества слов в названии, б) по возрастанию количества строк в названии, в) в алфавитном порядке.
№5
Код
Требования к выполнению заданий
Данные о предметной области представлены динамическим массивом структур, содержащими поля согласно варианту.
Разработать программу, которая осуществляет следующие функции. Все функции должны быть реализованы через меню пользователя, для всех заданий использовать динамические массивы.
а) ввод данных с клавиатуры (добавляя новые данные в массив), 
б) удаление выбранного элемента массива; 
в) вывод данных на экран (без сортировки).

г) выполнить задание а, б, в;
д) реализовать запись данных в файл, 
е) чтение данных из файла;
ж) вывод данных на экран, отсортировав по одному из строковых полей. 

з) выполнить требования г, д, е, ж;
и) вывод данных на экран, отсортировав по любому из полей на выбор пользователя (в т.ч. по вычисляемому полю.
к) вывод данных дополнить вычисляемым на момент вывода информации полем согласно варианту.

Задачи:
1. Автомобили: марка, год выпуска, объем двигателя, пробег. Вывод данных дополнить напоминанием о прохождении ТО, если пробег автомобиля больше 100 тыс. км.
2. Продукты питания: наименование, вес, цена, срок годности. Дополнить вывод информацией о товарах, которые следует уценить (срок годности которых истекает через 2 дня или ранее).
№6
Код
Требования к выполнению заданий
За основу взять задание и требования к заданию №5. Изменить программу так, чтобы программный код, выполняющий действия пунктов меню выполнялся в отдельных функциях (минимум по одной на каждый пункт меню).

Вариант 1 
а) допускается использование глобальных переменных по усмотрению студента. 
Вариант 2
а) допускается использование только двух глобальных переменных - массива структур и его размера. 
Вариант 3
а) использование глобальных переменных не допускается.
Заранее всем кто поможет благодарен и буду очень признателен.

Добавлено через 18 минут
В моем решении, вроде бы проходит компиляция, программа запускается, но не выводит результат. Не пойму почему.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
18.05.2011, 08:06     Найти решение - на разные темы
Посмотрите здесь:

C++ Найти такую прямую, по разные стороны от которой лежат по N/2 точек
Найти максимальный элемент вектора и вывести числа, расположенные до и после него в разные массивы C++
Найти лучшее решение C++
C++ Найти разные элементы масива
C++ Как переопределить функцию так, чтобы она не только могла принимать разные параметры, но и возвращать тоже разные?
Найти общее решение СЛАУ C++
C++ Пару задач на разные темы
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
dampir_sanek
149 / 147 / 21
Регистрация: 09.02.2010
Сообщений: 407
18.05.2011, 08:09     Найти решение - на разные темы #2
Raxxell, Ваше решение первой задачи делает не пойми что. Вот рабочая версия
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
/*Задача 1
 
 В одномерном массиве целых чисел заменить максимальное значение минимальным*/
 
# include <iostream>
 
# include <stdlib.h>
# include <stdio.h>
 
 
using namespace std;
 
int main()
{
    int i; // Задаем переменную для цикла
    int x;
    cout << "Vvedite razmernost' massiva -> ";
    cin >> x;
    int mas[x];
    cout << "\nZapolnjaem massiv" << endl;
    for (i = 0; i < x; i++) // Заполняем массив в ручную с клавиатуры
    {
        cout << "\nVvedite " << i+1 << " znachenije massiva -> ";
        cin >> mas[i];
    }
 
    int max=0, min=0;
 
 
    for (i = 1; i < x; i++) // Находим в массиве максимальное значение
        if (mas[i] > mas[max])
            max = i;
 
 
    for (i = 1; i < x; i++) // Находим в массиве минимальное значение
        if (mas[i] < mas[min])
            min = i;
 
    // меняем значения местами
    int tmp = mas[max];
    mas[max] = mas[min];
    mas[min] = tmp;
 
 
    cout << "U nas poluchilsja noviy massiv" << endl;
    for (i = 0; i < x; i++)
        cout << mas[i]<< endl;
    getchar();
 
    return 0;
}
Добавлено через 2 минуты
Не по теме:
Raxxell, я правильно понимаю,Вы учитесь на ИКИТе 1 - ый курс? Задания еще за 1 ый семестр.
Raxxell
10 / 10 / 1
Регистрация: 27.07.2010
Сообщений: 107
18.05.2011, 08:11  [ТС]     Найти решение - на разные темы #3
Сейчас проверить не могу, могу проверить только дома. Работаю в wxDevC++. Я думаю она пойдет. А можно подсказать где у меня ошибка? Хотя... сейчас попробую сам разобраться.

Добавлено через 2 минуты
Цитата Сообщение от dampir_sanek Посмотреть сообщение
RaxxellRaxxell, я правильно понимаю,Вы учитесь на ИКИТе 1 - ый курс? Задания еще за 1 ый семестр.[/COLOR]
Неправильно. 2-й курс, 3-ий семестр. Заочно.
dampir_sanek
149 / 147 / 21
Регистрация: 09.02.2010
Сообщений: 407
18.05.2011, 08:18     Найти решение - на разные темы #4
Raxxell, на очном - это 1 курс, 1 семестр.
Используйте Code::Blocks лучше, и под виндой и под линем отлично работает.
Raxxell
10 / 10 / 1
Регистрация: 27.07.2010
Сообщений: 107
18.05.2011, 08:20  [ТС]     Найти решение - на разные темы #5
Цитата Сообщение от dampir_sanek Посмотреть сообщение
Raxxell, на очном - это 1 курс, 1 семестр.
Используйте Code::Blocks лучше, и под виндой и под линем отлично работает.
А поподробнее можно? Я сейчас на Линуксе Debian 6.0. Как мне проверить программу?
kazak
 Аватар для kazak
3029 / 2350 / 155
Регистрация: 11.03.2009
Сообщений: 5,401
18.05.2011, 08:22     Найти решение - на разные темы #6
dampir_sanek, я открою страшную тайну: размер статического массива должен задаваться константной величиной
dampir_sanek
149 / 147 / 21
Регистрация: 09.02.2010
Сообщений: 407
18.05.2011, 08:42     Найти решение - на разные темы #7
kazak, ага, знаю такую фишечку. Тут не углядел, другую часть кода переделывал)) Rework code:
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
/*Задача 1
 
 В одномерном массиве целых чисел заменить максимальное значение минимальным*/
 
# include <iostream>
 
# include <stdlib.h>
# include <stdio.h>
 
 
using namespace std;
 
int main()
{
    int i; // Задаем переменную для цикла
    int x;
    cout << "Vvedite razmernost' massiva -> ";
    cin >> x;
    int *mas = new int[x];
    cout << "\nZapolnjaem massiv" << endl;
    for (i = 0; i < x; i++) // Заполняем массив в ручную с клавиатуры
    {
        cout << "\nVvedite " << i+1 << " znachenije massiva -> ";
        cin >> mas[i];
    }
 
    int max=0, min=0;
 
    for (i = 1; i < x; i++) // Находим в массиве максимальное значение
        if (mas[i] > mas[max])
            max = i;
 
 
    for (i = 1; i < x; i++) // Находим в массиве минимальное значение
        if (mas[i] < mas[min])
            min = i;
 
    // меняем значения местами
    int tmp = mas[max];
    mas[max] = mas[min];
    mas[min] = tmp;
 
 
    cout << "U nas poluchilsja noviy massiv" << endl;
    for (i = 0; i < x; i++)
        cout << mas[i]<< endl;
    delete[] mas;
    getchar();
 
    return 0;
}
Добавлено через 7 минут
Цитата Сообщение от Raxxell Посмотреть сообщение
А поподробнее можно? Я сейчас на Линуксе Debian 6.0. Как мне проверить программу?
на оффициальном сайте программы возьмите ИДЕ, установите по инструкции. Создаете консольный проект С++, ивставляете код из моего сообщения и F9)
Raxxell
10 / 10 / 1
Регистрация: 27.07.2010
Сообщений: 107
18.05.2011, 13:05  [ТС]     Найти решение - на разные темы #8
Установил прогу, попробовал задачу. Выдает такое:

Код
sh:/home/raxxell2011/zad1: Permission denied

Proccess returned 126 (0x7E)  execution time : 0.001 s
Press ENTER to continue.
Что бы это значило?

Добавлено через 11 секунд
Установил прогу, попробовал задачу. Выдает такое:

Код
sh:/home/raxxell2011/zad1: Permission denied

Proccess returned 126 (0x7E)  execution time : 0.001 s
Press ENTER to continue.
Что бы это значило?

Добавлено через 7 минут
[QUOTE=dampir_sanek;1662532]kazak, ага, знаю такую фишечку. Тут не углядел, другую часть кода переделывал)) Rework code:
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
/*Задача 1
 
 В одномерном массиве целых чисел заменить максимальное значение минимальным*/
 
# include <iostream>
 
# include <stdlib.h>
# include <stdio.h>
 
 
using namespace std;
 
int main()
{
    int i; // Задаем переменную для цикла
    int x;
    cout << "Vvedite razmernost' massiva -> ";
    cin >> x;
    int *mas = new int[x];
    cout << "\nZapolnjaem massiv" << endl;
    for (i = 0; i < x; i++) // Заполняем массив в ручную с клавиатуры
    {
        cout << "\nVvedite " << i+1 << " znachenije massiva -> ";
        cin >> mas[i];
    }
 
    int max=0, min=0;
 
    for (i = 1; i < x; i++) // Находим в массиве максимальное значение
        if (mas[i] > mas[max])
            max = i;
 
 
    for (i = 1; i < x; i++) // Находим в массиве минимальное значение
        if (mas[i] < mas[min])
            min = i;
 
    // меняем значения местами
    int tmp = mas[max];
    mas[max] = mas[min];
    mas[min] = tmp;
 
 
    cout << "U nas poluchilsja noviy massiv" << endl;
    for (i = 0; i < x; i++)
        cout << mas[i]<< endl;
    delete[] mas;
    getchar();
 
    return 0;
}
Я тут посмотрел задачку, а ведь решение то не совсем правильно. В этой проге, меняются местами минимальное и максимальное, а надо, максимальные заменить минимальными. Вот.

Добавлено через 1 минуту
И еще, если правильно понял, то меняется только один элемент, а если их будет несколько одинаковых, то как быть?
dampir_sanek
149 / 147 / 21
Регистрация: 09.02.2010
Сообщений: 407
18.05.2011, 17:48     Найти решение - на разные темы #9
Raxxell, переработал код, все недочеты исправил:
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
/*Задача 1
 
 В одномерном массиве целых чисел заменить максимальное значение минимальным*/
 
# include <iostream>
 
# include <stdlib.h>
# include <stdio.h>
 
 
using namespace std;
 
int main()
{
    int i; // Задаем переменную для цикла
    int x;
    cout << "Vvedite razmernost' massiva -> ";
    cin >> x;
    int *mas = new int[x];
    cout << "\nZapolnjaem massiv" << endl;
    for (i = 0; i < x; i++) // Заполняем массив в ручную с клавиатуры
    {
        cout << "\nVvedite " << i+1 << " znachenije massiva -> ";
        cin >> mas[i];
    }
 
    int max=0, min=0;
 
    for (i = 1; i < x; i++) // Находим в массиве максимальное значение
        if (mas[i] > mas[max])
            max = i;
 
 
    for (i = 1; i < x; i++) // Находим в массиве минимальное значение
        if (mas[i] < mas[min])
            min = i;
    // тут меняем максимальный(ые) элементы на минимальный
    int tmp_max = mas[max];
    for (i = 0; i < x; i++)
        if (mas[i] == tmp_max)
            mas[i] = mas[min];
 
    cout << "U nas poluchilsja noviy massiv" << endl;
    for (i = 0; i < x; i++)
        cout << mas[i]<< endl;
    delete[] mas;
    getchar();
 
    return 0;
}
Добавлено через 5 минут
Цитата Сообщение от Raxxell Посмотреть сообщение
Установил прогу, попробовал задачу. Выдает такое:
В дебиане бывает такая проблема:
Нужно изменить права доступа, и поставить xterm
Bash
1
2
$ sudo chmod a+x /usr/bin/cb_console_runner
$ sudo apt-get install xterm
luciuz
Сообщений: n/a
19.05.2011, 05:40     Найти решение - на разные темы #10
ы ) какие люди ) Raxxell юзай g++ и блокнот ) сам на линухе сижу
Raxxell
10 / 10 / 1
Регистрация: 27.07.2010
Сообщений: 107
19.05.2011, 12:32  [ТС]     Найти решение - на разные темы #11
Цитата Сообщение от dampir_sanek Посмотреть сообщение
В дебиане бывает такая проблема:
Нужно изменить права доступа, и поставить xterm
Bash
1
2
$ sudo chmod a+x /usr/bin/cb_console_runner
$ sudo apt-get install xterm
Или я такой невезучий или что.. не знаю. Все равно компилятор не хочет выполнять. Выдает ту же ошибку. А логах пишет:
Bash
1
2
3
4
5
Nothing to be done.
 
Checking for existence: /home/raxxell2011/zad1
Executing: xterm -T '/home/raxxell2011/zad1' -e /usr/bin/cb_console_runner "/home/raxxell2011/zad1" (in /home/raxxell2011)
Process terminated with status 0 (0 minutes, 1 seconds)
Что делать дальше?

Добавлено через 3 минуты
Переименовал файл в zad1.cpp , программа выдает другие логи.

Bash
1
2
3
4
5
6
7
8
9
Compiling: /home/raxxell2011/zad1.cpp
g++: /home/raxxell2011/zad1.cpp: Нет такого файла или каталога
g++: no input files
Process terminated with status 1 (0 minutes, 0 seconds)
0 errors, 0 warnings
 
Checking for existence: /home/raxxell2011/zad1
Executing: xterm -T '/home/raxxell2011/zad1' -e /usr/bin/cb_console_runner "/home/raxxell2011/zad1" (in /home/raxxell2011)
Process terminated with status 0 (0 minutes, 3 seconds)
А что это значит?

Добавлено через 6 минут
Цитата Сообщение от luciuz Посмотреть сообщение
ы ) какие люди ) Raxxell юзай g++ и блокнот ) сам на линухе сижу
Привет, поподробнее, где его взять, и как его юзать. А то я уже замучился с этими компиляторами.

Добавлено через 5 часов 56 минут
УРАААА!!!!
пошла массовка.
Набрал в терминале команду:
Bash
1
g++ <путь к файлу>.zad1.cpp
Появился файл a.out
Запустил его, и у меня пошла прога. Теперь беремся решать задачи. Жаль время поджимает.
dampir_sanek
149 / 147 / 21
Регистрация: 09.02.2010
Сообщений: 407
19.05.2011, 12:39     Найти решение - на разные темы #12
Raxxell, если из командной строки компилировать, тогда так
Bash
1
g++ <имя_файла.cpp> -o <желаемое имя программы>
Raxxell
10 / 10 / 1
Регистрация: 27.07.2010
Сообщений: 107
19.05.2011, 13:10  [ТС]     Найти решение - на разные темы #13
Так... у меня возникают опять вопросы:

Пытаюсь добавить строчки для проверки введенного числа на отрицательность, т.е. чтобы не вводили отрицательную, либо нулевую размерность массива.

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
int main()
{
[B] sel:[/B]
    int i; // Задаем переменную для цикла
    int x;
    cout << "Vvedite razmernost' massiva -> ";
    cin >> x;
   [B] if (x<=0)
      cout << "\nVvedite celoe pologitelnoe cislo" << endl;
    else 
      goto sel;[/B]
    int *mas = new int[x];
    cout << "\nZapolnjaem massiv" << endl;
Но у меня выдает ошибку

Bash
1
2
3
4
5
6
7
root@server1:/home/raxxell2011/cpp12# ./a.out
Vvedite razmernost' massiva -> -1
 
Vvedite celoe pologitelnoe cislo
terminate called after throwing an instance of 'std::bad_alloc'
  what():  std::bad_alloc
Аварийный останов
Чтобы это значило?
kazak
 Аватар для kazak
3029 / 2350 / 155
Регистрация: 11.03.2009
Сообщений: 5,401
19.05.2011, 13:15     Найти решение - на разные темы #14
Цитата Сообщение от Raxxell Посмотреть сообщение
C++
1
2
3
4
if (x<=0)
 cout << "\nVvedite celoe pologitelnoe cislo" << endl;
 else 
 goto sel;
=>
C++
1
2
3
4
5
if (x<=0)
{
   cout << "\nVvedite celoe pologitelnoe cislo" << endl;
   goto sel;
}
а еще лучше
C++
1
2
3
4
5
do
{
   cout << "\nVvedite celoe pologitelnoe cislo" << endl;
   cin >> x;
}while (x <= 0);
Raxxell
10 / 10 / 1
Регистрация: 27.07.2010
Сообщений: 107
19.05.2011, 14:17  [ТС]     Найти решение - на разные темы #15
Спасибо +1

Что то я тут уже забыл про эти циклы.

Запарился видимо.
Raxxell
10 / 10 / 1
Регистрация: 27.07.2010
Сообщений: 107
21.05.2011, 19:01  [ТС]     Найти решение - на разные темы #16
Привет всем!!!

Я тут решил первые задачи с массивами, но почему то у меня не выводит правильный ответ. На выходе получается нулевые значения, подскажите почему.

Вод коды программ:

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
/*Задача 1
 
 В одномерном массиве целых чисел заменить максимальное значение минимальным*/
 
# include <iostream>
 
# include <stdlib.h>
# include <stdio.h>
 
 
using namespace std;
 
int main()
{
sel:
    int i; // Задаем переменную для цикла
    int x,xx, namber;
    cout <<"\nZadacha 1: ->";
    cout <<"\nV odnomernom massive celih cisel zamenit' maximalnoe znachenie minimal'nim";
    cout <<"\n";
    cout <<"\nViberite punkt menu: ->";
    cout <<"\n1. Zadaem razmernost' massiva ->";
    cout <<"\n2. Zapolnenie massiva ->";
    cout <<"\n3. Obrabotka massiva ->";
    cout <<"\n4. Vivod massiva na monitor ->";
    cout <<"\n5. Povtorit' programmu ->" << endl;
    cin >> namber;
    switch(namber)
    {
    case 1:
        {
        do
        {
            cout <<"\nVvedite razmernost' massiva ->";
            cout << "\nVvedite celoe pologitelnoe cislo" << endl;
            cin >> x;
            xx = x;
        } while (x <= 0);
        goto sel; break;
        
        };
    case 2:
    {
    int *mas = new int[x];
    cout << "\nZapolnjaem massiv" << endl;
    for (i = 0; i < x; i++) // Заполняем массив в ручную с клавиатуры
    {
        cout << "\nVvedite " << i+1 << " znachenije massiva -> ";
        cin >> mas[i];
    }
    goto sel; break;
    
    }
 
    case 3:
    {    
    int max=0, min=0;
    int *mas = new int[x];
    for (i = 1; i < x; i++) // Находим в массиве максимальное значение
        if (mas[i] > mas[max])
            max = i;
 
 
    for (i = 1; i < x; i++) // Находим в массиве минимальное значение
        if (mas[i] < mas[min])
            min = i;
    // тут меняем максимальный(ые) элементы на минимальный
    int tmp_max = mas[max];
    for (i = 0; i < x; i++)
        if (mas[i] == tmp_max)
            mas[i] = mas[min];
    goto sel; break;
    
    }
    case 4:
    {
    int *mas = new int[x];
    cout <<"\nU nas poluchilsja noviy massiv ->";
    for (i = 0; i < x; i++)
        cout << mas[i]<< endl;
    delete[] mas;
    goto sel; break;
    
    }
    case 5:
    {goto sel; break;};
    default:
    {cout <<"\nVi vibrali nesuschestvu'uschiy punkt menu ->";
    cout <<"\nPoprobu'te zapustit' programmu zanovo ->" << endl;};
    getchar();
 
    return 0;
};
}
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
/*Задача 2
 
 Найти три наименьших положительных элементов одномерного массива целых чисел.*/
 
# include <iostream>
 
# include <stdlib.h>
# include <stdio.h>
 
 
using namespace std;
 
int main()
{
sel:
    int i; // Задаем переменную для цикла
    int x, namber;
    cout <<"\nZadacha 2: ->";
    cout <<"\n Naiti 3 naimenishih pologitelnih elementa massiva celih cisel ->";
    cout <<"\n";
    cout <<"\nViberite punkt menu: ->";
    cout <<"\n1. Zadaem razmernost' massiva ->";
    cout <<"\n2. Zapolnenie massiva ->";
    cout <<"\n3. Obrabotka massiva ->";
    cout <<"\n4. Vivod massiva na monitor ->";
    cout <<"\n5. Povtorit' programmu ->";
    cin >> namber;
    switch(namber)
    {
        case 1:
    {
    do
    {
        cout <<"\nVvedite razmernost' massiva ->";
        cout << "\nVvedite celoe pologitelnoe cislo" << endl;
        cin >> x;
    } while (x <= 0);
    int *mas = new int[x];
    break;
    };
    case 2:
    {
    int *mas = new int[x];
    cout << "\nZapolnjaem massiv" << endl;
    for (i = 0; i < x; i++) // Заполняем массив в ручную с клавиатуры
    {
        cout << "\nVvedite " << i+1 << " znachenije massiva -> ";
        cin >> mas[i];
    }
    break;
    };
    
    case 3:
    {
    int max=0, min=0;
    int *mas = new int[x];
    int mass[3], n;
    do
    {
    for (i = 1; i < x; i++) // Находим в массиве максимальное значение
        if (mas[i] > mas[max])
            max = i;
 
 
    for (i = 1; i < x; i++) // Находим в массиве минимальное значение
        if (mas[i] < mas[min])
    mass[n] = mas[i]; // Запоминаем минимальное значение
        mas[i] = mas[max]; // Затираем минимальное значение максимальным, чтобы не повторялось
    }while (n <= 2);
    break;
    };
    case 4:
    {
    int *mas = new int[x];
    cout <<"\nU nas poluchilsja noviy massiv ->";
    for (i = 0; i < x; i++)
        cout << mas[i]<< endl;
    delete[] mas;
    break;
    };
    case 5:
    {goto sel; break;};
    default:
    {cout <<"\nVi vibrali nesuschestvu'uschiy punkt menu ->";
    cout <<"\nPoprobu'te zapustit' programmu zanovo ->" << endl;};
    getchar();
 
    return 0;
};
}
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
/*Задача 3
 
 Заменить отрицательные элементы одномерного массива целых чисел на нули, 
 а затем подсчитать количество нулевых элементов*/
 
# include <iostream>
 
# include <stdlib.h>
# include <stdio.h>
 
 
using namespace std;
 
int main()
{
sel:
    int i; // Задаем переменную для цикла
    int x, namber;
    cout <<"\nZadacha 3:";
    cout <<"\nZamenit' otricatelniye elementi odnomernogo massiva celih cisel na nulli,";
    cout <<"\na zatem podschitat' ih";  
    cout <<"\n";
    cout <<"\nViberite punkt menu: ->";
    cout <<"\n1. Zadaem razmernost' massiva ->";
    cout <<"\n2. Zapolnenie massiva ->";
    cout <<"\n3. Obrabotka massiva ->";
    cout <<"\n4. Vivod massiva na monitor ->";
    cout <<"\n5. Povtorit' programmu ->";
    cin >> namber;
    switch(namber)
    {
        case 1:
    {
    do
    {
        cout <<"\nVvedite razmernost' massiva ->";
        cout << "\nVvedite celoe pologitelnoe cislo" << endl;
        cin >> x;
    } while (x <= 0);
    int *mas = new int[x];
    break;
    };
    case 2:
    {
    int *mas = new int[x];
    cout << "\nZapolnjaem massiv" << endl;
    for (i = 0; i < x; i++) // Заполняем массив в ручную с клавиатуры
    {
        cout << "\nVvedite " << i+1 << " znachenije massiva -> ";
        cin >> mas[i];
    }
    break;
    };
 
    case 3:
    {
        int otr=0, min=0; int *mas = new int[x];
    for (i = 1; i < x; i++) // Находим в массиве отрицательные элементы
        if (mas[i] < 0)
            otr = i;
    // тут меняем максимальный(ые) элементы на минимальный
    int tmp_otr = mas[otr];
    for (i = 0; i < x; i++)
        if (mas[i] == tmp_otr)
            mas[i] = 0;
    break;
    };
    case 4:
    {
    int *mas = new int[x];
    cout <<"\nU nas poluchilsja noviy massiv ->";
    for (i = 0; i < x; i++)
        cout << mas[i]<< endl;
    delete[] mas;
    break;
    };
    case 5:
    {goto sel; break;};
    default:
    {cout <<"\nVi vibrali nesuschestvu'uschiy punkt menu ->";
    cout <<"\nPoprobu'te zapustit' programmu zanovo ->";};
 
    getchar();
 
    return 0;
};
}
Программы рабочие, я уже проверил. Но вот результат...

Помогите плиз.
Raxxell
10 / 10 / 1
Регистрация: 27.07.2010
Сообщений: 107
23.05.2011, 06:35  [ТС]     Найти решение - на разные темы #17
Я конечно извиняюсь за назойливость, но хоть кто нить подскажите хоть похожие программы, я уж их как нить сам переделаю. А то никаких мыслей нет, даже не знаю куда копать. Потому что еще тут несколько контрольных делаю параллельно.
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
23.05.2011, 07:06     Найти решение - на разные темы
Еще ссылки по теме:

C++ Builder В StringGrid возможно на разные колонки, ячейки сделать разные ограничения?
Найти решение системы уравнений C++
C++ Найти решение СЛАУ
Темы из раздела С++ для экспертов и другие интересные темы C++
Найти решение неравенства C++

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

Или воспользуйтесь поиском по форуму:
dampir_sanek
149 / 147 / 21
Регистрация: 09.02.2010
Сообщений: 407
23.05.2011, 07:06     Найти решение - на разные темы #18
Raxxell,
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
/*Задача 3 
 Заменить отрицательные элементы одномерного массива целых чисел на нули, 
 а затем подсчитать количество нулевых элементов*/
 
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
 
int gen_random( int range_min, int range_max ) {
 
if ( range_min>range_max ) {
        fprintf( stderr, "gen_random(): Invalid arguments\n" ); exit( 1 );
}
 
return range_min+rand()%(range_max-range_min+1);
 
}
 
int main()
{
   srand((unsigned int) time(NULL));
   int n, i;
   int count = 0;
   printf ("Введите размерность массива -> ");
   scanf("%d%*c", &n);
   int *A = (int*) malloc(n*sizeof(int));
   for (i = 0; i < n; ++i)
       A[i] = gen_random(-10, 10);
       printf("\nСгенерированный массив: \n");
   for (i = 0; i < n; ++i) printf("%d%c", A[i], (i%10 == 9 || i==n-1) ? '\n' : ' ');
   for (i = 0; i < n; ++i)
       if (A[i] < 0)
            {
                A[i] = 0;
                count++;
            }
    printf("\nМассив после обработки\n");
   for (i = 0; i < n; ++i) printf("%d%c", A[i], (i%10 == 9 || i==n-1) ? '\n' : ' ');
   printf("\n\nЧисло нулевых элементов в массиве = %d", count);
   free(A);
   A = NULL;
   return 0;
}
Yandex
Объявления
23.05.2011, 07:06     Найти решение - на разные темы
Ответ Создать тему
Опции темы

Текущее время: 04:50. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru