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

Надо написать программу на С++ с использованием указателей - C++

Восстановить пароль Регистрация
Другие темы раздела
C++ Очередная формация давно решённой задачи http://www.cyberforum.ru/cpp-beginners/thread784588.html
Всем доброго времени суток! Необходимо было решить задачу с 2мя кубиками: Задача: написать программу, реализующую игру в кости. Правила игры: 1. Играющий называет любое число в диапазоне от 2 до 12 и ставку, которую он делает в этот ход 2. Программа с помощью генератора случайных чисел дважды выбирает числа от 1 до 6 (бросает кубик, на гранях которого цифры от 1 до 6) 3. Если сумма...
C++ вычисление значений периодической функции Код программы: #include <stdio.h> #include <math.h> int main(void) { short n; /* параметр внешнего цикла */ double x, y; /* абсцисса и ордината графика */ short h; /* позиция точки на экране */ /* внешний цикл - для 5 периодов */ for (n=0; n<5; n++) { http://www.cyberforum.ru/cpp-beginners/thread784573.html
C++ Не переводит строку
printf("1\t2\t3\t4\t5\n1\t4\t9\t16\t25"); Почему?
C++ конструктор копирования
Помогите вывести конструктор копирования #include <iostream> //библиотека C++, позволяющая использовать систему ввода-вывода C++ #include <cstdlib> /*функции, занимающиеся выделением памяти, контроль процесса выполненияпрограммы, преобразования типов и другие.*\ #include <string> #include <iomanip> //В этом файле определены некоторые манипуляторы потокового ввода/вывода. #include...
C++ Изменить способ выделения памяти для массива (вместо new использовать malloc) http://www.cyberforum.ru/cpp-beginners/thread784522.html
#include "stdafx.h" #include "stdlib.h" struct str_Team{ char Komanda; int Ochki; int Gold; int Silver; int Bronze; };
C++ Проблемы с кодировкой Проблема в следующем: Нужно сравнить два слова на русском языке. Одно - читается с текстового файла, другое вводится с консоли. Понимаю, что нужно переключать кодировки... типа: setlocale(0,""); и setlocale(0, ".OCP"); Но это не помогает. Как бы не менял кодировки, одинаковые русские слова в файле и с консоли понимаются. как различные. Подскажите чего и где тут изменить, добавить (в смысле... подробнее

Показать сообщение отдельно
xtorne21st
интересующийся
300 / 271 / 19
Регистрация: 25.09.2010
Сообщений: 1,056
12.02.2013, 17:00     Надо написать программу на С++ с использованием указателей
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
#include <iostream>
#include <ctime>
#include <cstdlib>
 
// v = массив, n = количество элем., sum = сумма., cmp = произвед.
void do_it(int* v, int n, int* sum, long* cmp) {
    *sum = *cmp = 0;
 
    // найдём сумму
    for (int* p = v; p != v+n; ++p) 
        if (*p >= 0)
            *sum += *p;
 
    // найдём произведение
    int* max = v;
    int* min = v;
    for (int* p = v; p != v+n; ++p) {
        if (abs(*max) < abs(*p))
            max = p;
        if (abs(*min) > abs(*p))
            min = p;
    }
 
    int* temp_p = 0;
    if (max < min) {
       temp_p = max;
       max = min;
       min = temp_p;
    }
 
    for (*cmp = 1; min <= max; ++min)
            *cmp *= *min;
 
    // отсортируем пызырьковым методом
    for (int* pf = v+1, temp; pf != v+n; ++pf)
        for (int* ps = v+n-1; ps >= pf; --ps)
            if (*(ps-1) > *ps) {
                temp = *ps;
                *ps = *(ps-1);
                *(ps-1) = temp;
            }
}
 
int main()
{
    int size;
    int sum;
    long cmp;
 
    std::cout << "Enter size of array: ";
    std::cin >> size;
 
    int* arr = new int[size];
 
    srand(time(0));
    std::cout << "\nGenerating array:\n";
    for (int* p = arr, i = 0; p < arr + size; ++p, ++i) {
        *p = ((rand() % 10) < 5) ? (rand() % 100) : -(rand() % 100);
        std::cout << *p;
        // Выводить по 10 элементов в строке
        (i % 10 == 9) ? (std::cout << '\n') : (std::cout << ' ');
    }
    std::cout << "\n\n";
 
    do_it(arr, size, &sum, &cmp);
 
    std::cout << "Sum: " << sum << std::endl;
    std::cout << "Composition: " << cmp << "\n\n";
    std::cout << "Result:\n";
    for (int* p = arr, i = 0; p < arr + size; ++p, ++i) {
        std::cout << *p;
        (i % 10 == 9) ? (std::cout << '\n') : (std::cout << ' ');
    }
    std::cout << '\n';
 
    delete [] arr;
 
    return 0;
}
Добавлено через 10 минут
Ах, ну да, забыл указатель на функцию:
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
#include <iostream>
#include <ctime>
#include <cstdlib>
 
// v = массив, n = количество элем., sum = сумма., cmp = произвед.
void do_it(int* v, int n, int* sum, long* cmp) {
    *sum = *cmp = 0;
 
    // найдём сумму
    for (int* p = v; p != v+n; ++p) 
        if (*p >= 0)
            *sum += *p;
 
    // найдём произведение
    int* max = v;
    int* min = v;
    for (int* p = v; p != v+n; ++p) {
        if (abs(*max) < abs(*p))
            max = p;
        if (abs(*min) > abs(*p))
            min = p;
    }
 
    int* temp_p = 0;
    if (max < min) {
       temp_p = max;
       max = min;
       min = temp_p;
    }
 
    for (*cmp = 1; min <= max; ++min)
            *cmp *= *min;
 
    // отсортируем пызырьковым методом
    for (int* pf = v+1, temp; pf != v+n; ++pf)
        for (int* ps = v+n-1; ps >= pf; --ps)
            if (*(ps-1) > *ps) {
                temp = *ps;
                *ps = *(ps-1);
                *(ps-1) = temp;
            }
}
 
int main()
{
    int size;
    int sum;
    long cmp;
 
    std::cout << "Enter size of array: ";
    std::cin >> size;
 
    int* arr = new int[size];
 
    srand(time(0));
    std::cout << "\nGenerating array:\n";
    for (int* p = arr, i = 0; p < arr + size; ++p, ++i) {
        *p = ((rand() % 10) < 5) ? (rand() % 100) : -(rand() % 100);
        std::cout << *p;
        // Выводить по 10 элементов в строке
        (i % 10 == 9) ? (std::cout << '\n') : (std::cout << ' ');
    }
    std::cout << "\n\n";
 
    void (*ptr_to_func)(int *, int, int *, long *);
    ptr_to_func = do_it;
 
    (*ptr_to_func)(arr, size, &sum, &cmp);
 
    std::cout << "Sum: " << sum << std::endl;
    std::cout << "Composition: " << cmp << "\n\n";
    std::cout << "Result:\n";
    for (int* p = arr, i = 0; p < arr + size; ++p, ++i) {
        std::cout << *p;
        (i % 10 == 9) ? (std::cout << '\n') : (std::cout << ' ');
    }
    std::cout << '\n';
 
    delete [] arr;
 
    return 0;
}
Добавлено через 1 минуту
Цитата Сообщение от Al-chan Посмотреть сообщение
спасибо)
Если чувствуете, что удовлетворены ответом, жмите "Спасибо"

Добавлено через 10 минут
Единственный нюанс: не стоит злоупотреблять размером массива, так как произведение попросту может не вместиться в long
 
Текущее время: 12:48. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru