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

В заданном одномерном массиве исключите все числа, равные заданному числу - C++

Восстановить пароль Регистрация
 
Пушистик
 Аватар для Пушистик
8 / 8 / 0
Регистрация: 10.12.2009
Сообщений: 15
14.03.2010, 19:02     В заданном одномерном массиве исключите все числа, равные заданному числу #1
В данном одномерном массиве a(m) исключите все числа,равные заданному числу k. массив a(m) уплотните,и напечатайте результат.

у меня вопрос,связанный с уплотнением массива.как это сделать???остальное понимаю все,как реализовать,проблема с этой частью.
помогите пожалуйста))
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
14.03.2010, 19:02     В заданном одномерном массиве исключите все числа, равные заданному числу
Посмотрите здесь:

в одномерном массиве А состоящем из N элементов найти максимальные элементы и все элементы равные максимальному заменить на 0. C++
C++ Получить все четырехзначные числа, сумма цифр которых равна заданному числу n
В данном одномерном массиве исключите все вхождения заданного числа. Массив уплотните и напечатайте результат C++
В одномерном массиве, элементы которого -целые числа, удалить все четные числа C++
Вывести все четырёхзначные числа, сумма чисел которых равна заданному числу C++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
accept
4838 / 3237 / 165
Регистрация: 10.12.2008
Сообщений: 10,682
15.03.2010, 10:22     В заданном одномерном массиве исключите все числа, равные заданному числу #2
memmove ?
быстрее, конечно, перегнать все подходящие числа в другой массив
а потом один раз применить memcpy

представляю массив из ста элементов, из которых один подходящий, а остальные удаляемые
memmove будет работать впустую
Пушистик
 Аватар для Пушистик
8 / 8 / 0
Регистрация: 10.12.2009
Сообщений: 15
15.03.2010, 19:56  [ТС]     В заданном одномерном массиве исключите все числа, равные заданному числу #3
дополнительный массив нельзя заводить(((

можно ли например ввести еще один цикл типа:
C
1
2
3
4
5
6
7
8
9
 for (i=1;i<m;i++)
   {  
     if (a[i]==k)
       for (j=1;j<m;j++)
     {
        a[j]=a[j+1];
      }
   m-=1;
    }
CyBOSSeR
Эксперт C++
 Аватар для CyBOSSeR
2293 / 1663 / 86
Регистрация: 06.03.2009
Сообщений: 3,675
15.03.2010, 20:27     В заданном одномерном массиве исключите все числа, равные заданному числу #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
25
26
#include <iostream>
 
int Remove(int* arr, int size, int key)
{
  int result = 0;
 
  for (int i = 0; i < size; ++i)
    if (arr[i] == key){
      for (int j = i; j < size - 1; ++j)
        arr[j] = arr[j + 1];
      ++result;
  }
 
  return size - result;       
}
 
int main()
{
  int arr[] = {1, 2, 3, 1, 5, 6};
  int size = Remove(arr, sizeof(arr) / sizeof(arr[0]), 1);
 
  for (int i = 0; i < size; ++i)
   std::cout << arr[i] << " ";
 
  return 0;
}
Пушистик
 Аватар для Пушистик
8 / 8 / 0
Регистрация: 10.12.2009
Сообщений: 15
15.03.2010, 20:38  [ТС]     В заданном одномерном массиве исключите все числа, равные заданному числу #5
CyBOSSeR, а вы не могли бы немного разъяснить???))
CyBOSSeR
Эксперт C++
 Аватар для CyBOSSeR
2293 / 1663 / 86
Регистрация: 06.03.2009
Сообщений: 3,675
15.03.2010, 20:39     В заданном одномерном массиве исключите все числа, равные заданному числу #6
Пушистик, что конкретно?
Пушистик
 Аватар для Пушистик
8 / 8 / 0
Регистрация: 10.12.2009
Сообщений: 15
15.03.2010, 20:42  [ТС]     В заданном одномерном массиве исключите все числа, равные заданному числу #7
int Remove(int* arr, int size, int key) вот это не понятно...
result=0 это я так понимаю типа флага???
return size - result;и еще std::cout << arr[i] << " ";
CyBOSSeR
Эксперт C++
 Аватар для CyBOSSeR
2293 / 1663 / 86
Регистрация: 06.03.2009
Сообщений: 3,675
15.03.2010, 20:49     В заданном одномерном массиве исключите все числа, равные заданному числу #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
28
29
#include <iostream>
 
int Remove(int* arr, int size, int key)
{
  int result = size;
 
  for (int i = 0; i < result; ++i)
    if (arr[i] == key){
      --result;
 
      for (int j = i; j < result; ++j)
        arr[j] = arr[j + 1];
 
      arr[result] = key;
    }
 
    return result;       
}
 
int main()
{
  int arr[] = {1, 2, 3, 1, 5, 6};
  int size = Remove(arr, sizeof(arr) / sizeof(arr[0]), 1);
 
  for (int i = 0; i < size; ++i)
    std::cout << arr[i] << " ";
 
  return 0;
}
Цитата Сообщение от Пушистик Посмотреть сообщение
int Remove(int* arr, int size, int key)
Функция уплотняющая массив перенося в конец элементы равные key.
Возвращает размер уплотненного массива.
Цитата Сообщение от Пушистик Посмотреть сообщение
result=0 это я так понимаю типа флага???
Нет. Это возвращаемый результат (размер уплотненного массива).
Цитата Сообщение от Пушистик Посмотреть сообщение
std::cout << arr[i] << " ";
Выводит i-ый элемент массива arr и пробел.
Пушистик
 Аватар для Пушистик
8 / 8 / 0
Регистрация: 10.12.2009
Сообщений: 15
15.03.2010, 20:56  [ТС]     В заданном одномерном массиве исключите все числа, равные заданному числу #9
CyBOSSeR, спасибо вам огромное!!!
и еще вопрос:эту часть кода нужно вставлять сразу после:
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
#include "stdafx.h"
#include <conio.h>
#include "testing.h"
 
int _tmain(int argc, _TCHAR* argv[])
{
 
int mas[20]; //объявление массива
int m; //объявление размеров массива
int k,i; //дополнительные переменные
 
scanf("%d",&k);
scanf("%d",&m); // ввод размера массива
if (m<2 || m>20) //проверка размера массива
{
error_printf ("Invalid input data");
} //конец проверки размера
else
{
for (i=0; i<m; i++) //цикл ввода массива
{
scanf ("%d", &mas[i]); //чтение каждого элемента массива
if (mas[i]>1000 || mas[i]<-1000) //сразу при вводе проверка каждого элемента массива заданным ограничениям
{
error_printf ("Invalid input data");
WAIT_ANY_KEY
return 0;
}
}
^Tecktonik_KiLLeR
 Аватар для ^Tecktonik_KiLLeR
1144 / 426 / 19
Регистрация: 23.06.2009
Сообщений: 6,141
Завершенные тесты: 1
15.03.2010, 22:10     В заданном одномерном массиве исключите все числа, равные заданному числу #10
от себя добавлю. На счет удаления
C++
1
2
3
4
5
int var[10]{1,2,3,4,5,6,7,8,9,};
int k=4;
for(int i=0;i<10;i++){
if(var[i]==k)var[i]=0;
}
Пушистик
 Аватар для Пушистик
8 / 8 / 0
Регистрация: 10.12.2009
Сообщений: 15
16.03.2010, 21:27  [ТС]     В заданном одномерном массиве исключите все числа, равные заданному числу #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
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
#include "stdafx.h"
#include <conio.h>
#include "testing.h"
 
int _tmain(int argc, _TCHAR* argv[])
{
int arr[20]; //объявление массива
int m; //объявление размеров массива
int k,i,j,n; //дополнительные переменные
 
input_printf("input number k  "); 
scanf("%d",&k); //ввод числа для сравнения с элементами массива
input_printf("input the size of the array m  ");
scanf("%d",&m); // ввод размера массива
if (m<2 || m>20) //проверка размера массива
{
 printf("wrong input numbers");
} //конец проверки размера
else
{
for (i=0; i<m; i++) //цикл ввода массива
{
input_printf("input elements of the array A  ");
scanf ("%d", &arr[i]); //чтение каждого элемента массива
if (arr[i]>1000 || arr[i]<-1000) //сразу при вводе проверка каждого элемента массива заданным ограничениям
{
 printf("wrong elements of the array");
WAIT_ANY_KEY
return 0;
}
}
}
n=0;
  for (i = 0; i <m;i++)
  { 
      if (arr[i] ==k)
    { 
      for (j = i; j < m;j++)
      { 
          arr[j] = arr[j + 1];
      }
      n++;
      m--;
      i--;
  }
  }    
for (i=0; i<m; i++) //цикл вывода массива
{ if (n==m)
   {printf("no solution");}
   else 
    printf("%d ",arr[i]);
}
WAIT_ANY_KEY 
return 0; 
}


не работает случай, когда все элементы массива равны заданному числу k
accept
4838 / 3237 / 165
Регистрация: 10.12.2008
Сообщений: 10,682
17.03.2010, 04:51     В заданном одномерном массиве исключите все числа, равные заданному числу #12
C
1
2
            for (j = i; j < m; j++) { 
                arr[j] = arr[j + 1];
выход за край

а это
C
1
m--;
не проверяется на выход за левый край массива
чтобы сделать, введи m равное еденице и элемент равный k
Пушистик
 Аватар для Пушистик
8 / 8 / 0
Регистрация: 10.12.2009
Сообщений: 15
17.03.2010, 20:18  [ТС]     В заданном одномерном массиве исключите все числа, равные заданному числу #13
а что значит,если при m больше диапазона [2,20] он мне на экран кроме сообщения об ошибке выводит какие-то непонятные цифры -858993460???количество этих повторений зависит от введенного m и равно ему...как с этим бороться???))
accept
4838 / 3237 / 165
Регистрация: 10.12.2008
Сообщений: 10,682
18.03.2010, 05:14     В заданном одномерном массиве исключите все числа, равные заданному числу #14
когда ввёл неправильное m, сразу выходи из программы с return EXIT_FAILURE;
там цикл в конце
Пушистик
 Аватар для Пушистик
8 / 8 / 0
Регистрация: 10.12.2009
Сообщений: 15
18.03.2010, 12:34  [ТС]     В заданном одномерном массиве исключите все числа, равные заданному числу #15
ммммм,я переставила } в одном месте и все заработало правильно)))
grrrrr
 Аватар для grrrrr
45 / 45 / 7
Регистрация: 21.04.2009
Сообщений: 265
18.03.2010, 13:14     В заданном одномерном массиве исключите все числа, равные заданному числу #16
CyBOSSeR, привет! Учу С++ уже 200 лет, но ни как не пойму почему ты (и не только ты) в своем коде где объявляешь функцию там ее и описываешь? В книжке написано что надо сначало объявить прототип функции, а потом ее описать. Прочитал недавно что то по встроенные функции у них синтаксис такой же как у тебя, только перед типом возвращаемого значения стоит "волшебное" слово inline.
fasked
Эксперт C++
 Аватар для fasked
4924 / 2504 / 180
Регистрация: 07.10.2009
Сообщений: 4,306
Записей в блоге: 1
18.03.2010, 13:16     В заданном одномерном массиве исключите все числа, равные заданному числу #17
Цитата Сообщение от grrrrr Посмотреть сообщение
Учу С++ уже 200 лет, но ни как не пойму почему ты в своем коде где объявляешь функцию там ее и описываешь? В книжке написано что надо сначало объявить прототип функции, а потом ее описать. Прочитал недавно что то по встроенные функции у них синтаксис такой же как у тебя, только перед типом возвращаемого значения стоит "волшебное" слово inline.
Синтаксис у подставляемых функций такой же как и у обычных.
Genius Ignat
1233 / 771 / 44
Регистрация: 16.09.2009
Сообщений: 2,014
18.03.2010, 13:18     В заданном одномерном массиве исключите все числа, равные заданному числу #18
grrrrr:
В данном случаем программа не разбивается на модули *.h и *.cpp: интерфейс и реализацию.
поэтому: то что делает CyBOSSeR особой роли не играет.
Ответ: Объявление и определение.
grrrrr
 Аватар для grrrrr
45 / 45 / 7
Регистрация: 21.04.2009
Сообщений: 265
18.03.2010, 13:31     В заданном одномерном массиве исключите все числа, равные заданному числу #19
Я как бы так и думал! Просто в книжке так написано вот и спросил. Пока буду придерживаться книжки, т.к. более понятен код для меня. Спасибо!
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
18.03.2010, 13:38     В заданном одномерном массиве исключите все числа, равные заданному числу
Еще ссылки по теме:

Напечатать на экране все трёхзначные числа, кратные заданному числу C++
Найти все трехзначные числа, сумма цифр которых равна заданному целому числу C++
C++ Проверить условие: количество строк матрицы, в которой все числа нечетные, кратно заданному числу

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

Или воспользуйтесь поиском по форуму:
fasked
Эксперт C++
 Аватар для fasked
4924 / 2504 / 180
Регистрация: 07.10.2009
Сообщений: 4,306
Записей в блоге: 1
18.03.2010, 13:38     В заданном одномерном массиве исключите все числа, равные заданному числу #20
В общем прототипы нужны чтобы можно было использовать функции в любой последовательности:
Например такой вариант будет работоспособен:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
void foo();
void bar();
 
int main()
{
    bar();
}
 
void bar()
{
    foo();
}
 
void foo()
{
    std::cout << "foo" << std::endl;
}
Если же прототипами не пользоваться то может возникнуть следующая ситуация:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
void bar()
{
    foo();
}
 
void foo()
{
    std::cout << "foo" << std::endl;
}
 
int main()
{
    bar();
}
Ошибка компиляции, функция foo() неизвестна.

Переписав это следующим образом все становится опять хорошо
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
void foo()
{
    std::cout << "foo" << std::endl;
}
void bar()
{
    foo();
}
 
int main()
{
    bar();
}
Поэтому в небольших программках запись с использованием прототипов в принципе и не нужна, если соблюдать правильный порядок объявлений
Yandex
Объявления
18.03.2010, 13:38     В заданном одномерном массиве исключите все числа, равные заданному числу
Ответ Создать тему
Опции темы

Текущее время: 00:56. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru