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

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

Войти
Регистрация
Восстановить пароль
 
 
Рейтинг: Рейтинг темы: голосов - 9, средняя оценка - 4.56
Garret192
1 / 1 / 0
Регистрация: 21.10.2009
Сообщений: 84
#1

Массив - C++

18.02.2010, 20:18. Просмотров 1084. Ответов 22
Метки нет (Все метки)

Привет всем.Помогите пожалуйста решить задачу.
Дан массив. Найти k наименьших элементов.
Т.е с клавы вводится k и если в массиве
3 4 76 4 2 4
k=3
То выведется 3 4 4 2 4
P.S.. Выводить числа в той же последовательности в которой они были в массиве.
P.P.S. Заранее спасибо.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
18.02.2010, 20:18     Массив
Посмотрите здесь:

Дан массив размерности n. Заполнить массив случайными числами в диапазоне [-100;100]. Перевернуть массив: - C (СИ)
Дан массив размерности n. Заполнить массив случайными числами в диапазоне . Перевернуть массив: a↔a, a↔a и т.д. Для работы с массивом...

Вывести на печать массив X, массив Z, массив Y, произведение элементов массива X, упорядоченный массив Y - QBasic
Вывести на печать массив X, массив Z, массив Y, произведение элементов массива X, упорядоченный массив Y. ...

Дан массив целых чисел а(12). Переписать в массив х четные, а в массив у нечетные элементы массива а - Turbo Pascal
Помогите пожалуйста решить эту задачу. Массив a выводит на печать. Я пишу a mod 2 = 0 , а он мне 41 ошибку выдает. Что делать? Вот...

Дан одномерный массив A из N элементов. Переписать положительные элементы массива в массив B, а отрицательные в массив C - Pascal
Дан одномерный массив A из N элементов. Переписать положительные элементы массива в массив B, а отрицательные в массив C.

Сформировать массив, который будет состоять из чисел, входящих как в массив A, так и в массив B - C (СИ)
Задание: На основе исходных массивов A и B (n и m – рабочие размеры массивов) сформировать массив C, который будет состоять из чисел,...

Массив: Отсортировать полученный массив 3 способами: по строкам, по столбцам( возр.), 3) и весь массив - Delphi
Помогите, пожалуйста ,решить задачу. Очень нужно. Задан массив (4*6). Элементы задаются по правилу: если j>3, то Aij=i+j, иначе...

После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
fasked
Эксперт С++
4933 / 2513 / 180
Регистрация: 07.10.2009
Сообщений: 4,311
Записей в блоге: 1
18.02.2010, 20:49     Массив #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
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
void swap(int &A, int &B)
{
        int t = A;
        A = B;
        B = t;
}
// Сортировка методом пузырька
void sort(int * a, int l, int r)
{
        for(int i = l; i < r; i++)
                for(int j = r; j > i; j--)
                        if(a[j-1] > a[j])
                                swap(a[j-1], a[j]);
}
int main()
{
    const int SIZE = 6;
    int a[] = { 3, 5, 76, 4, 2, 4 };
    int k, c = 0;
    
    cout << "введите k: ";
    cin >> k;
    
    int * t = new int[SIZE];
    memcpy(t, a, SIZE*sizeof(int));
    sort(t, 0, SIZE-1);
    for(int i = 0; i < SIZE && c < k; i++)
        if(t[i] != t[i+1])
            c++;
    c = t[c];
    delete[] t;
    
    for(int i = 0; i < SIZE; i++)
        if(a[i] <= c)
            cout << a[i] << " ";
    
    cout << endl;
    system("pause");
}
Garret192
1 / 1 / 0
Регистрация: 21.10.2009
Сообщений: 84
18.02.2010, 21:13  [ТС]     Массив #3
Прости а
C++
1
2
3
4
5
6
void swap(int &A, int &B)
{
        int t = A;
        A = B;
        B = t;
}
и
C++
1
2
3
4
5
6
7
void sort(int * a, int l, int r)
{
        for(int i = l; i < r; i++)
                for(int j = r; j > i; j--)
                        if(a[j-1] > a[j])
                                swap(a[j-1], a[j]);
}
это равносильные функции или состовлящие одной программы?
fasked
Эксперт С++
4933 / 2513 / 180
Регистрация: 07.10.2009
Сообщений: 4,311
Записей в блоге: 1
18.02.2010, 21:16     Массив #4
состовлящие одной программы.
с их помощью массив сортируется по возрастанию, чтобы можно было определить максимальный элемент, который нужно выводить.
cibertronic
256 / 143 / 13
Регистрация: 27.12.2009
Сообщений: 893
18.02.2010, 21:50     Массив #5
пжди.....те над чтоб были выведены ток числа которые больше или меньше чем k на еденецу?
типа старший младший..... гдет была такая задача тогда, и она проще пишется....

Добавлено через 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
#include <conio.h>
#include <stdio.h>
#include <stdlib.h>
void main()
{
const int N1=100;
int i,k,n,a[N1];
system("echo введите количество элементов в массиве");
scanf("%d",&n);
system("echo введите число k");
scanf("%d",&k);
system("echo введите елементы массива");
for(i=0;i<n;i++)
 scanf("%d",&a[i]);
system("echo полученный массив");
 for(i=0;i<n;i++)
  {
  if(a[i]==k-1 || a[i]==k+1 || a[i]==k)
  printf("%3d",a[i]);
  }
 
getch();
}
Добавлено через 30 секунд
вот так )

Добавлено через 3 минуты
кста здесь использовано system("echo сообщение"); это то же что и стандартные для си функции вывода на экран, только работают системно, и уж точно русский язык выводят)
fasked
Эксперт С++
4933 / 2513 / 180
Регистрация: 07.10.2009
Сообщений: 4,311
Записей в блоге: 1
18.02.2010, 21:53     Массив #6
cibertronic, а задание мы читать умеем?
Дан массив. Найти k наименьших элементов.
Добавлено через 16 секунд
Ключевое слово "наименьших", а не "соседних"
cibertronic
256 / 143 / 13
Регистрация: 27.12.2009
Сообщений: 893
18.02.2010, 22:00     Массив #7
ну а если тут нужно вывести элементы меньше 10 но больше нуля то в 18й строке просто if(a[i]<10 && a[i]>0) ток причем тут k? гг

Добавлено через 2 минуты
Цитата Сообщение от fasked Посмотреть сообщение
Ключевое слово "наименьших", а не "соседних"
ну если k у него 3 то по идее тогда должно быть 3 4 4 и все

Добавлено через 2 минуты
Цитата Сообщение от fasked Посмотреть сообщение
а задание мы читать умеем?
читаем вроди)
fasked
Эксперт С++
4933 / 2513 / 180
Регистрация: 07.10.2009
Сообщений: 4,311
Записей в блоге: 1
18.02.2010, 22:03     Массив #8
k - это количество наименьших элементов, а не количество элементов, которые надо вывести.

Добавлено через 25 секунд
Цитата Сообщение от cibertronic Посмотреть сообщение
читаем вроди)
Плохо читаем, человек же даже пример привел
kravam
быдлокодер
1691 / 878 / 44
Регистрация: 04.06.2008
Сообщений: 5,423
18.02.2010, 22:08     Массив #9
fasked, я так думаю, тс понятия не имел что ему надо выводить.
в приведённом им примере (задании) выведены числа 3 4 4 2 4
...По какому принципу они выведены- одному Богу известно. Нигде не сказано, что должно вывестись 5 наименьших.
Признатьься, я тоже понял, что необходимо вывести k наименьших, то есть три числа
3 4 4

а у тебя при k==3 выводится 4 числа
3 4 2 4
Почему ты вывел именно 4 числа а не 2 или 1 спрашивать не берусь. Наверное, ты просто ошибся. Бывает.
fasked
Эксперт С++
4933 / 2513 / 180
Регистрация: 07.10.2009
Сообщений: 4,311
Записей в блоге: 1
18.02.2010, 22:12     Массив #10
Цитата Сообщение от Garret192 Посмотреть сообщение
если в массиве
3 4 76 4 2 4
k=3
То выведется 3 4 4 2 4
Вот поэтому, почему человек в примере вывел не 3 числа, а именно 5 вы видимо тоже не возьметесь спрашивать у него.
Garret192
1 / 1 / 0
Регистрация: 21.10.2009
Сообщений: 84
18.02.2010, 23:06  [ТС]     Массив #11
fasked всё правильно говорит.

Добавлено через 3 минуты
Наименьших 3 числа это 2 3 и 4, но 4 встречается несколько раз поэтому мы и выводим 3 4 4 2 4
kravam
быдлокодер
1691 / 878 / 44
Регистрация: 04.06.2008
Сообщений: 5,423
18.02.2010, 23:06     Массив #12
Ну он тебя понял а я не могу. Вот оъясни мне почему у тебя в задании выводятся пять чисел 3 4 4 2 4?
То, что они наименьшие, я вижу. Но почему их 5?
Нет, я жду!
...Ну так бы сразу исказал.
valeriikozlov
Эксперт C++
4669 / 2495 / 321
Регистрация: 18.08.2009
Сообщений: 4,550
18.02.2010, 23:07     Массив #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
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
#include <iostream>
 
using namespace std;
int main ()
{
    const n=6;
    int k, i, kol_min=1, min, fl=1, temp, fl1;
    int mas[6]={3, 4, 76, 4, 2, 4};
    // здесь можно сделать ввод значения k с клавиатуры
    k=3;
    min=mas[0];
    for(i=0; i<n; i++)
        if(min>mas[i])
            min=mas[i];
    while(kol_min<k && fl)
    {
        fl1=0;
        fl=0;
        for(i=0; i<n; i++)
        {
            if(!fl1 && mas[i]>min)
            {
                fl1=1;
                temp=mas[i];
                fl=1;
            }
            if(fl && temp>mas[i] && mas[i]>min)
                temp=mas[i];
        }
        kol_min++;
        min=temp;
    }
    if(!fl)
        cout<<"Stolko minimalnih elementov net"<<endl;
    else
    {
        for(i=0; i<n; i++)
            if(mas[i]<=min)
                cout<<mas[i]<<"  ";
    } 
    return 0; 
}
Garret192
1 / 1 / 0
Регистрация: 21.10.2009
Сообщений: 84
19.02.2010, 00:16  [ТС]     Массив #14
Наименьших. 2 3 4 их 3=к ,а в порядке в котором они в массиве и с повторениями они мне нужны для другого задания где эта операция является одной из подпрограмм.
fasked
Эксперт С++
4933 / 2513 / 180
Регистрация: 07.10.2009
Сообщений: 4,311
Записей в блоге: 1
19.02.2010, 00:52     Массив #15
вот valeriikozlov вроде более красивое и адекватное решение предложил))
хотел сначала что-то наподбе изобразить, но сил соображать уже нет)))
cibertronic
256 / 143 / 13
Регистрация: 27.12.2009
Сообщений: 893
19.02.2010, 14:11     Массив #16
терь понятно задание))
Garret192
1 / 1 / 0
Регистрация: 21.10.2009
Сообщений: 84
19.02.2010, 23:44  [ТС]     Массив #17
to valeriikozlov while(kol_min<k && fl)
Извини ачто значит & fl
insideone
Модератор
Автор FAQ
3636 / 914 / 49
Регистрация: 10.01.2010
Сообщений: 2,465
19.02.2010, 23:48     Массив #18
C++
1
while(kol_min<k && fl)
Тоже что
C++
1
while(kol_min<k && fl == true)
Т.к. fl int тип. наверное имеется ввиду такое условие
C++
1
while(kol_min<k && fl != 0)
Потому как 0 - это false а остальное преобразуется в true
valeriikozlov
Эксперт C++
4669 / 2495 / 321
Регистрация: 18.08.2009
Сообщений: 4,550
20.02.2010, 05:32     Массив #19
Garret192, insideone правильно пишет. Если бы Вы указали что писать на языке C++ , то я использовал бы не int fl, а bool fl. А int fl он подходит и для C и для C++.
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
21.02.2010, 21:07     Массив
Еще ссылки по теме:

Массив: Как сделать так, чтобы результирующий массив представлял собой измененный по заданным правилам первый массив? - C++ Builder
Доброй ночи форумчане, очередной нубо-вопрос не требует отлагательств имеется одномерный массив, из которого по заданным условиям...

Вывести массив а(i, j), одномерный массив b(i) и полученный массив АВ с помощью функции Cells - VBA
Задача 1 Написать программу для решения следующей задачи: для числа n вводимого с клавиатуры (с помощью функции InputBox())...

Построить массив d из элементов, которые входят как в массив a так и в массив b - C (СИ)
Дан массив a и b состоящий из n элементов. Построить массив d из элементов, которые входят как в массив a так и в массив b. Желательно с...

Массив. Разделить на два: массив элементов с четными и массив с нечетными индексами - Pascal ABC
VII.Одномерные массивы 50. Задан массив с количеством элементов N. Сформировать два массива: в первый включить элементы исходного массива...


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

Или воспользуйтесь поиском по форуму:
Garret192
1 / 1 / 0
Регистрация: 21.10.2009
Сообщений: 84
21.02.2010, 21:07  [ТС]     Массив #20
valeriikozlov, Извини ты не мог бы обьяснить эту часть порграммы
Цитата Сообщение от valeriikozlov Посмотреть сообщение
for(i=0; i<n; i++)
if(min>mas[i])
min=mas[i];
while(kol_min<k && fl)
{
fl1=0;
fl=0;
for(i=0; i<n; i++)
{
if(!fl1 && mas[i]>min)
{
fl1=1;
temp=mas[i];
fl=1;
}
if(fl && temp>mas[i] && mas[i]>min)
temp=mas[i];
}
kol_min++;
min=temp;
}
Yandex
Объявления
21.02.2010, 21:07     Массив
Ответ Создать тему
Опции темы

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