0 / 0 / 1
Регистрация: 30.10.2012
Сообщений: 61
1

Подобрать к заданному числу ранвую или близкую по значению переменную

08.11.2012, 12:23. Показов 2263. Ответов 27
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Вобщем есть 10 переменных. Пользователь задает число Н и к нему подбирается равная либо большая (максимально к нему близкая) по значению переменная.
Как это осуществить в плане кода?
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
08.11.2012, 12:23
Ответы с готовыми решениями:

Найти сумму элементов из двух массивов, наиболее близкую к заданному числу
Даны два массива x содержащий k элементов и y содержащий n элементов и число q. Найти сумму вида...

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

Найти элемент в массиве, который ближе всего по значению к заданному числу
подскажите пожалуйста с основным алгоритмом

Определить индекс элемента, находящийся ближе всего по значению к заданному числу.
1. Дан одномерный массив. Определить индекс элемента, находящийся ближе всего по значению к...

27
4311 / 1422 / 463
Регистрация: 16.12.2010
Сообщений: 2,939
Записей в блоге: 3
08.11.2012, 12:52 2
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
#include <iostream>
int main(void)
{
 const int n =10;
 int a[n]={10,33,25,64,77,59,6,38,23,3},k,m,j=0; //массив 10 чисел (дано)
 std::cin>>k;
 for (int i=0; i<n; i++)
  if (std::abs(a[i]-k)<m)
   {
    m=std::abs(a[i]-k);
    j=i;
   }
 std::cout<<"Number: "<<a[j]<<std::endl;
 system("PAUSE");
 return 0;
}
0
0 / 0 / 1
Регистрация: 30.10.2012
Сообщений: 61
08.11.2012, 14:12  [ТС] 3
Блин я перепутал) мне нужно C# а не С++, Администратор пожалуйста перенесите тему в соответствующий раздел.
0
2 / 2 / 0
Регистрация: 27.03.2012
Сообщений: 50
08.11.2012, 14:20 4
Построй этот код по такому же принцыпу..
Не чего сложного..
0
4311 / 1422 / 463
Регистрация: 16.12.2010
Сообщений: 2,939
Записей в блоге: 3
08.11.2012, 15:47 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
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
 
namespace ConsoleApplication1
{
    class Program
    {
        static void Main(string[] args)
        {
            const int n = 10;
            int[] a = new int[] { 10, 33, 25, 64, 77, 59, 6, 38, 23, 3 }; //массив 10 чисел (дано)
            int k, m = 100000, j = 0; 
            k = Convert.ToInt32(Console.ReadLine());
            for (int i = 0; i < n; i++)
                if (Math.Abs(a[i] - k) < m)
                {
                    m = Math.Abs(a[i] - k);
                    j = i;
                }
            Console.WriteLine(a[j]);
            Console.ReadKey();
        }
    }
}
0
0 / 0 / 1
Регистрация: 30.10.2012
Сообщений: 61
08.11.2012, 16:25  [ТС] 6
Если я не ошибаюсь оно находит ближайше число с любой стороны?
Прости за глупый вопрос просто я еще не разобрался с алгоритмами, где подправить что бы находило только большее чем заданое?
И если скажем я использую числа по типу 2305843008139952128 на что нужно заменить int что бы не было ошибки? а то у меня там ппц числа самое большое 191561942608236107294793378084303638130997321548169216)
0
4311 / 1422 / 463
Регистрация: 16.12.2010
Сообщений: 2,939
Записей в блоге: 3
08.11.2012, 16:50 7
что бы находило только большее чем заданное
C#
1
 if (Math.Abs(a[i] - k) < m && a[i]>k )
Насчет чисел не знаю, что там в C# имеется. Но в тип int64 (наибольший) такое число точно не поместится. Надо придумывать способ хранения таких чисел.
0
0 / 0 / 1
Регистрация: 30.10.2012
Сообщений: 61
08.11.2012, 21:07  [ТС] 8
Вобщем пришлось убрать пару чисел потому что как я понял они не влезут вообще, и получилось что то типа
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
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
 
namespace ConsoleApplication1
{
    class Program
    {
        static void Main(string[] args)
        {
            const int n = 8;
            int[] a = new int[] { 6, 28, 496, 8128, 33550336, 8589869056, 137438691328, 2305843008139952128};
            int k, m = 100000, j = 0;
            k = Convert.ToInt32(Console.ReadLine());
            for (int i = 0; i < n; i++)
                if (Math.Abs(a[i] - k) < m && a[i]>k ) 
 
                {
                    m = Math.Abs(a[i] - k);
                    j = i;
                }
            Console.WriteLine(a[j]);
            Console.ReadKey();
        }
    }
}
Добавлено через 9 минут
при замене int34 на 64 выбивает ошибку что нельзя использовать инт, после замены инт на лонг вообще все красное...блин я опять запутался
0
4311 / 1422 / 463
Регистрация: 16.12.2010
Сообщений: 2,939
Записей в блоге: 3
08.11.2012, 21:35 9
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
 
class Program
    {
        static void Main(string[] args)
        {
            const int n = 8;
            Int64[] a = new Int64[] { 6, 28, 496, 8128, 33550336, 8589869056, 137438691328, 2305843008139952128 };
            Int64 k, m = Int64.MaxValue, j = 0;
            k = Convert.ToInt64(Console.ReadLine());
            for (int i = 0; i < n; i++)
                if (Math.Abs(a[i] - k) < m && a[i] > k)
                {
                    m = Math.Abs(a[i] - k);
                    j = i;
                }
            Console.WriteLine(a[j]);
            Console.ReadKey();
        }
}
1
0 / 0 / 1
Регистрация: 30.10.2012
Сообщений: 61
14.11.2012, 21:37  [ТС] 10
Я добавил там еще исключение
C#
1
2
 if (k <= 0)
            throw new IndexOutOfRangeException("Je možne zadavat jenom přirozena císla");
Но появился новый вопрос)
Как сделать так что бы после неверно заданных данных для входа програма не только выписала ошибку но и попросила задать еще раз?Ну скажем что бы после 3-4 неправильных вводов числа програма сама выбрала рандом и посчитала для него результаты.
0
4311 / 1422 / 463
Регистрация: 16.12.2010
Сообщений: 2,939
Записей в блоге: 3
14.11.2012, 22:16 11
Если так, то можно без исключений:
C#
1
2
3
4
5
6
7
8
9
            Int64 k;
            do
            {
                Console.Write("Input k: ");
                k = Convert.ToInt64(Console.ReadLine());
                if (k <= 0)
                    Console.Write("Wrong input, ");  
            }
            while (k < 0);

Не по теме:

Вообще, лучше в специализированном разделе спрашивать, здесь как-то по c++ больше)

0
0 / 0 / 1
Регистрация: 30.10.2012
Сообщений: 61
14.11.2012, 22:49  [ТС] 12
очень познавательно, я даже не знал)
Но вот меня больше интересовал момент где после скажем 3-4 неправильных вводов програма сама вставит рандом число от 1 до скажем максимального указаного в масиве из 8 чисел.
Я вообще ничего подобного не встречал( я о месте с 3-4 неправильными вводами).
0
4311 / 1422 / 463
Регистрация: 16.12.2010
Сообщений: 2,939
Записей в блоге: 3
14.11.2012, 23:59 13
Ну, можно же по извращаться над переменными и т.д.:
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
static void Main(string[] args)
        {
            Int64 k=0;
            int i = 0;
            while (k<=0)
            {
                Console.Write("Input k: ");
                k = Convert.ToInt64(Console.ReadLine());
                if (k <= 0)
                {
                    if (i == 3)
                    {
                        Random t = new Random();
                        k = t.Next(1, 100000000);
                        Console.Write("New value of k: ");
                        Console.Write(k);
                        break;
                    }
                    Console.Write("Wrong input, ");
                    i++;
                }
           }
      
            Console.ReadKey();
        }
0
0 / 0 / 1
Регистрация: 30.10.2012
Сообщений: 61
15.11.2012, 01:15  [ТС] 14
Смотри вот полностю код получился у меня вроди все работает на отлично но проблемка у меня опять начало выбивать отрицательные числа в ответ, где ошибка?
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
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
 
class Program
{
    static void Main(string[] args)
    {
        int r = 0;
        const int n = 8;
        Int64[] a = new Int64[] { 6, 28, 496, 8128, 33550336, 8589869056, 137438691328, 2305843008139952128 };
        Int64 k, m = Int64.MaxValue, j = 0;     
        do
        {
            Console.Write("Zadejte cislo: ");
            k = Convert.ToInt64(Console.ReadLine());
            if (k <= 0)
               
                    if (r == 3)
                    {
                        Random t = new Random();
                        k = t.Next(1, 100000000);
                        Console.Write("New value of k: ");
                        Console.Write(k);
                        break;
                    }
                    Console.Write("Wrong input, ");
                    r++;
        }
        while (k <= 0);
        for (int i = 0; i < n; i++)
            if (Math.Abs(a[i] - k) < m && a[i] > k)
            {
                m = Math.Abs(a[i] - k);
                j = i;
            }
        Console.WriteLine("Nejblizsi dokonale cislo - " + a[j]);
        Console.ReadKey();
 
 
    }
}
Добавлено через 5 минут
Причем выдает вообще только отрицательные числа(что то я испортил...
0
4311 / 1422 / 463
Регистрация: 16.12.2010
Сообщений: 2,939
Записей в блоге: 3
15.11.2012, 01:17 15
По-моему это не число отрицательное, а в коде тире стоит:
Console.WriteLine("Nejblizsi dokonale cislo - " + a[j]);
1
0 / 0 / 1
Регистрация: 30.10.2012
Сообщений: 61
15.11.2012, 01:22  [ТС] 16
ой я дурачек случайно поставил)
0
0 / 0 / 1
Регистрация: 30.10.2012
Сообщений: 61
19.11.2012, 14:55  [ТС] 17
А есть какое то исключение что бы не вписали текст вместо чисел?
Или проверка какаято на дроби и не целые числа?
0
4311 / 1422 / 463
Регистрация: 16.12.2010
Сообщений: 2,939
Записей в блоге: 3
19.11.2012, 15:17 18
NosferatuMax, есть наверно, спросите тут.
0
0 / 0 / 1
Регистрация: 30.10.2012
Сообщений: 61
21.11.2012, 14:21  [ТС] 19
Это исключение FormatException
0
0 / 0 / 1
Регистрация: 30.10.2012
Сообщений: 61
26.11.2012, 23:15  [ТС] 20
Я конечно извеняюсь за то что в который раз пишу здесь) но только здесь мне дают достаточно быстро ответ и достаточно понятно(
Реально ли как то сделать что бы после того как напишет сообщение исключения можно было еще ввести несколько раз в консоль информацию.
Обьясняю по проще:
Ниже есть целый код куда вписано исключение FormatException
цель - сделать что бы после 3 формат ексепшенов сделало тоже самое что и при вводе 3 раза подряд отрицательного числа.
Но через твой способ не получется, глянь я с низу пытался сделать, но после одного сообщения консоль закрывается...
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
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
 
class Program
{
    static void Main(string[] args)
    {
 
        try
        {
 
 
 
            //deklarujeme promenne
            int r = 0;
            const int n = 8;
            Int64[] a = new Int64[] { 6, 28, 496, 8128, 33550336, 8589869056, 137438691328, 2305843008139952128 };
            Int64 k, m = Int64.MaxValue, j = 0;
            do
            {
 
 
 
 
                //umožnujeme zadat K
                Console.Write("Zadejte cislo K : ");
                k = Convert.ToInt64(Console.ReadLine());
 
 
 
                //Zkontrolujeme zda zadaná hodnota leží v předepsaném intervalu 
                if (k <= 0)
                {
                    if (r == 3)
                    {
                        Random t = new Random();
                        k = t.Next(1, 100000000);
                        Console.Write("K je nastavene na :   ");
                        Console.Write(k);
                        break;
                    }
                    Console.Write("Je možne zadavat jenom přirozena čisla , ");
                    r++;
                }
            }
 
 
            //algorytm vypočtu nejbližsiho dokonaleho čisla
            while (k <= 0);
            for (int i = 0; i < n; i++)
                if (Math.Abs(a[i] - k) < m && a[i] > k)
                {
                    m = Math.Abs(a[i] - k);
                    j = i;
                }
 
            //vypisovani vysledku
            Console.WriteLine(" Nejblizsi dokonale cislo  " + a[j]);
            Console.ReadKey();
 
        }
 
        catch (FormatException e)
        {
            Console.WriteLine("Zadejte cele kladne čislo  " + e.Message);
            {
                int d = 0;
                Int64 k = Int64.MaxValue;
                if (d == 3)
                {
                    Random t = new Random();
                    k = t.Next(1, 100000000);
                    Console.Write("K je nastavene na :   ");
                    Console.Write(k);
 
                }
 
 
            }
 
        }
    }
}
0
26.11.2012, 23:15
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
26.11.2012, 23:15
Помогаю со студенческими работами здесь

Определить, есть ли хотя бы одно число, которое кратно заданному числу А и не кратно заданному числу В
Составить программу для решения предложенной задачи. Выясните имеются ли среди чисел i3 – 17*i*n2 +...

Массив: Найти сумму вида X[i]+Y[i] , наиболее близкую к числу q
.Даны два массива x &lt;=...&lt;=X, и Y &lt;=...&lt;=Y и число q . Найти сумму вида X+Y , наиболее близкую к...

Равен ли первый или второй элементы списка заданному числу
Дан список, объектами которого являются целые числа. Размерность списка может быть любой. Равен...

Получить все члены последовательности меньшие или равные заданному числу
Дано действительное число b&gt;0. Последовательность a1, a2,… образована по следующему закону: a1=1,...


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

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

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