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

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

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

без цикла. - C++

14.10.2011, 02:15. Просмотров 593. Ответов 10
Метки нет (Все метки)

мучаюсь несколько дней.
есть такая задача:
с клавиатуры ввели 10 чисел. не используя операторов цикла найти 2 крупнейших числа.
и еще одна задача: в массиве из 10 чисел найти значения 2-х самых малых чисел. (здесь уже с использованием циклов).
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
14.10.2011, 02:15
Здравствуйте! Я подобрал для вас темы с ответами на вопрос без цикла. (C++):

Решение без цикла - C++
Вот задачка, пожалуйста решите ее. Вообщем она легкая, но для уверенности мне нужно знать точно.

Рендер без цикла - C++
Доброго времени суток. Нужно сделать функцию обновления для простого консольного приложения которое будет работать в фоне, но без цикла....

Посчитать сумму без цикла - C++
Здравствуйте! Никак не пойму как можно посчитать сумму(сигма) без использования цикла. Нужно найти сумму \sum_{i=0}^{n}{({i}^{2} +...

Перестановка строк без цикла - C++
дана произвольная матрица, записанная в файле, необходимо поменять местами две любые строчки этой матрицы, не используя цикл.

Посчитать сумму без цикла - C++
Здравствуйте! Никак не пойму как можно посчитать сумму(сигма) без использования цикла. Нужно найти сумму (i=0)E(N)=i^3 Здесь нет...

Поменять местами строки, без цикла. - C++
Дано слово из четного числа букв. Поменять местами его половины. Решить задачу двумя способами 1) без цикла 2) с циклом ...

10
greeezz
273 / 166 / 4
Регистрация: 10.07.2011
Сообщений: 441
14.10.2011, 02:31 #2
Цитата Сообщение от ghjas Посмотреть сообщение
с клавиатуры ввели 10 чисел. не используя операторов цикла найти 2 крупнейших числа.
Вы можете проверять при вводе числа с клавиатуры является ли число больше чем предыдущее и если да то сохранять его. В итоге у вас останентся самое больше число.

Второй вариант это использование рекурсивной функции которая пройдет по массиву.
0
Net_Wanderer
235 / 208 / 19
Регистрация: 08.06.2011
Сообщений: 467
14.10.2011, 02:33 #3
Цитата Сообщение от ghjas Посмотреть сообщение
и еще одна задача: в массиве из 10 чисел найти значения 2-х самых малых чисел. (здесь уже с использованием циклов).
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
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
 
#define N 10
 
int main()
{
    int arr[N], i, min1, min2;
 
    srand(time(NULL));
    printf("array:\n");
    for (i = 0; i < N; i++) {
        printf("%d ", arr[i] = rand() % 21 - 10);
        if (i == 0)
            min1 = min2 = *arr;
        if (arr[i] < min1) {
            min2 = min1;
            min1 = arr[i];
        }
    }
    printf("\nmin1 = %d\nmin2 = %d\n", min1, min2);
    return 0;   
}
0
greeezz
273 / 166 / 4
Регистрация: 10.07.2011
Сообщений: 441
14.10.2011, 03:24 #4
собственно говоря то что у меня получилось с
рекурсией

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
void findMax(float myArray[], const int arraySize, int iter,  float *max1, float *max2){
    if(iter==arraySize){
        cout << "MAX1 is : " << *max1 << "\nMAX2 is : " << *max2;
    } else {
        if(*max1 < myArray[iter]){ 
            *max2 = *max1;
            *max1 = myArray[iter];
        }
        findMax(myArray, arraySize, (iter+1), max1, max2);
    }
 
}
 
int main()
{
    int iter = 0;
    float max1 = 0, max2;
    const int arraySize = 10;
    float myArra[arraySize] = {12,1,34,56,7,89,5,43,10,22};
 
    findMax(myArra, arraySize, iter, &max1, &max2);
    _getch();       
    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
int main(){
    float b, c, d, e, f, g, h, i, j, k;
    float max1 = 0;
    float max2 = 0;
 
    cout << "Vvedite 10 chisel cherez probel\n";
    cin >> b;
    if(b>max1) {max1 = b;}
    cin >> c;
    if(c>max1) {max2 = max1; max1 = c;}
    cin >> d;
    if(d>max1) {max2 = max1; max1 = d;}
    cin >> e;
    if(e>max1) {max2 = max1; max1 = e;}
    cin >> f;
    if(f>max1) {max2 = max1; max1 = f;}
    cin >> g;
    if(g>max1) {max2 = max1; max1 = g;}
    cin >> h;
    if(h>max1) {max2 = max1; max1 = h;}
    cin >> i;
    if(i>max1) {max2 = max1; max1 = i;}
    cin >> j;
    if(j>max1) {max2 = max1; max1 = j;}
    cin >> k;
    if(k>max1) {max2 = max1; max1 = k;}
 
    cout << "MAX1 is : " << max1 << "\nMAX2 is :" << max2;
    _getch(); 
        return 0;
}

Не по теме:

после ctr+c и ctr+v не забудьте добавить необходимый #include

0
alkagolik
Заблокирован
14.10.2011, 03:54 #5
ну вот собственно рекурсивно с массивом
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
#include <stdio.h>
 
void num_in(int *arr, int size)
{
    if(size)
    {
        scanf("%d", *&arr);
        num_in(arr + 1, size - 1);
    }
    return size;
}
 
void print_arr(int *arr, int size)
{
    if (size)
    {
        printf("%d ", *arr);
        print_arr(arr + 1, size - 1);
    }
}
 
int find_max(int *arr, int size, int max)
{
    int tmp = max;
 
    if (size)
    {
        if (tmp < *arr)
            tmp = *arr;
        tmp = find_max(arr + 1, size - 1, tmp);
    }
    return tmp;
}
 
int find_index_max(int *arr, int size, int max, int count)
{
    int tmp = count;
    if (size)
    {
        if (*arr == max)
            return tmp;
        else
            find_index_max(arr + 1, size - 1, max, count + 1);
    }
}
 
void change_value(int *arr, int max, int count)
{
    int tmp1 = *arr, tmp2 = *(arr + count);
    *arr = tmp2;
    *(arr + count) = tmp1;
}
 
int main()
{
    int *x, n = 10, max = 0, max2 = 0, count = 0;
    x = (int *) malloc(n * sizeof(int));
 
    num_in(x, n);
    print_arr(x, n);
 
    max = find_max(x, n, max);
    printf("\n max = %d \n", max);
 
    count = find_index_max(x, n, max, count);
    change_value(x, max, count);
 
    max2 = find_max(x + 1, n - 1, max2);
    printf("\n max2 = %d \n", max2);
 
    free(x);
    return 0;
}
0
greeezz
273 / 166 / 4
Регистрация: 10.07.2011
Сообщений: 441
14.10.2011, 03:59 #6
alkagolik, У меня вопрос сугубо для собственно просвещения. вот тут:
C++
1
2
3
4
5
6
7
8
9
void num_in(int *arr, int size)
{
    if(size)
    {
        scanf("%d", *&arr);
        num_in(arr + 1, size - 1);
    }
    return size;
}
return size; уместно ? Вроде как VOID. Если до то почему? Спасибо!
0
alkagolik
Заблокирован
14.10.2011, 04:14 #7
greeezz, да это очепятка просто. она изначально была инт, а потом стала воид. спасибо что заметили. надо ретурн убрать

Добавлено через 11 минут
greeezz, но для просвещения вам что в Си такой фокус проходит. коряво тут нацарапаю немного, вы поймете.
C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
void *f(int size)
{
    void *t;
    t = (void*)malloc(size * sizeof(void));
    return t;
}
 
int main()
{
    int *x;
    float *y;
 
    x = f(10);
    y = f(20);
}
0
greeezz
273 / 166 / 4
Регистрация: 10.07.2011
Сообщений: 441
14.10.2011, 04:26 #8
Цитата Сообщение от alkagolik Посмотреть сообщение
но для просвещения вам что в Си такой фокус проходит.
Оригинально. Интересно, насколько целесообразно (или необходимо) использование таких конструкций.
0
alkagolik
Заблокирован
14.10.2011, 05:43 #9
Цитата Сообщение от greeezz Посмотреть сообщение
насколько целесообразно (или необходимо) использование таких конструкций.
конфликт типов конечно не факт что так делать нужно (void **func()) для выделения памяти, однако... факт есть

Добавлено через 1 час 5 минут
вообще я в #7 немного попутал (время сказывается видимо). вот сейчас писал и наткнулся на пример в манах
C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
static void *
       thread_start(void *arg)
       {
           struct thread_info *tinfo = (struct thread_info *) arg;
           char *uargv, *p;
 
           printf("Thread %d: top of stack near %p; argv_string=%s\n",
                   tinfo->thread_num, &p, tinfo->argv_string);
 
           uargv = strdup(tinfo->argv_string);
           if (uargv == NULL)
               handle_error("strdup");
 
           for (p = uargv; *p != '\0'; p++)
               *p = toupper(*p);
 
           return uargv;
       }
0
Евгений М.
1036 / 977 / 54
Регистрация: 28.02.2010
Сообщений: 2,829
Завершенные тесты: 2
14.10.2011, 05:58 #10
Цитата Сообщение от greeezz Посмотреть сообщение
float b, c, d, e, f, g, h, i, j, k;
На мой взгляд можно обойтись с одной переменной вместо 10.
0
greeezz
273 / 166 / 4
Регистрация: 10.07.2011
Сообщений: 441
14.10.2011, 06:58 #11
Евгений М.,
Вы правы.

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
int main(){ 
        float b, max1 = 0, max2;
 
    cout << "Vvedite 10 chisel cherez probel\n";
    cin >> b;
    if(b>max1) {max1 = b;}
    cin >> b;
    if(b>max1) {max2 = max1; max1 = b;}
    cin >> b;
    if(b>max1) {max2 = max1; max1 = b;}
    cin >> b;
    if(b>max1) {max2 = max1; max1 = b;}
    cin >> b;
    if(b>max1) {max2 = max1; max1 = b;}
    cin >> b;
    if(b>max1) {max2 = max1; max1 = b;}
    cin >> b;
    if(b>max1) {max2 = max1; max1 = b;}
    cin >> b;
    if(b>max1) {max2 = max1; max1 = b;}
    cin >> b;
    if(b>max1) {max2 = max1; max1 = b;}
    cin >> b;
    if(b>max1) {max2 = max1; max1 = b;}
 
    cout << "MAX1 is : " << max1 << "\nMAX2 is :" << max2;   
    _getch();       
    return 0;
}
0
14.10.2011, 06:58
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
14.10.2011, 06:58
Привет! Вот еще темы с ответами:

Шейкерная сортировка без использования while цикла - C++
Ребят, сделал шейкерную сортировку через два вложенных цикла - не работает. Не могу понять в чем проблема, подскажите пожалуйста. ...

Вывод двумерного массива без цикла - C++
Мне, короче, надо выводить двумерный массив на экран при каждом нажатии клавиши. С циклом for всё проходит гладко, но сейчас у меня имеется...

Как обойти массив без использования цикла - C++
С помощью рекурсии

Заполнение контейнера map из файла без цикла - C++
В общем, вопрос следущий. Интересует, возможно ли инициализировать контейнер map, данными из файла, без использования циклов. Например,...


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

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

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