Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 5.00/5: Рейтинг темы: голосов - 5, средняя оценка - 5.00
2 / 2 / 0
Регистрация: 19.11.2009
Сообщений: 66
1

без цикла.

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

Author24 — интернет-сервис помощи студентам
мучаюсь несколько дней.
есть такая задача:
с клавиатуры ввели 10 чисел. не используя операторов цикла найти 2 крупнейших числа.
и еще одна задача: в массиве из 10 чисел найти значения 2-х самых малых чисел. (здесь уже с использованием циклов).
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
14.10.2011, 02:15
Ответы с готовыми решениями:

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

Перебор без цикла
Доброго времени суток. У меня есть следующий код: for (int i = 0; i < 10; i++) for (int j =...

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

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

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

Второй вариант это использование рекурсивной функции которая пройдет по массиву.
0
237 / 210 / 29
Регистрация: 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
278 / 173 / 21
Регистрация: 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
Заблокирован
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
278 / 173 / 21
Регистрация: 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
Заблокирован
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
278 / 173 / 21
Регистрация: 10.07.2011
Сообщений: 441
14.10.2011, 04:26 8
Цитата Сообщение от alkagolik Посмотреть сообщение
но для просвещения вам что в Си такой фокус проходит.
Оригинально. Интересно, насколько целесообразно (или необходимо) использование таких конструкций.
0
Заблокирован
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
1080 / 1007 / 106
Регистрация: 28.02.2010
Сообщений: 2,889
14.10.2011, 05:58 10
Цитата Сообщение от greeezz Посмотреть сообщение
float b, c, d, e, f, g, h, i, j, k;
На мой взгляд можно обойтись с одной переменной вместо 10.
0
278 / 173 / 21
Регистрация: 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
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
14.10.2011, 06:58
Помогаю со студенческими работами здесь

Посчитать сумму без цикла
Здравствуйте! Никак не пойму как можно посчитать сумму(сигма) без использования цикла. Нужно найти...

Посчитать сумму без цикла
Здравствуйте! Никак не пойму как можно посчитать сумму(сигма) без использования цикла. Нужно найти...

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

Как заполнить массив без цикла
Нужно заполнить массив разными целыми числами через консоль, можно ли сделать это без цикла?...


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

Или воспользуйтесь поиском по форуму:
11
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru