Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.55/11: Рейтинг темы: голосов - 11, средняя оценка - 4.55
 Аватар для Пушистик
8 / 8 / 0
Регистрация: 10.12.2009
Сообщений: 15

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

14.03.2010, 19:02. Показов 2436. Ответов 19
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
В данном одномерном массиве a(m) исключите все числа,равные заданному числу k. массив a(m) уплотните,и напечатайте результат.

у меня вопрос,связанный с уплотнением массива.как это сделать???остальное понимаю все,как реализовать,проблема с этой частью.
помогите пожалуйста))
1
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
14.03.2010, 19:02
Ответы с готовыми решениями:

Проверить, имеются ли в данном одномерном массиве элементы равные заданному числу
29. Решить задачу в Turbo Pascal.С клавиатуры вводится число, проверить, имеются ли в данном одномерном массиве элементы равные данному...

В данном одномерном массиве исключите все вхождения заданного числа. Массив уплотните и напечатайте результат
Помогите пожалуйста! Очень нужно решение В данном одномерном массиве исключите все вхождения заданного числа. Массив уплотните и...

В заданном одномерном массиве целого типа найти те элементы, произведение цифр которых равно заданному числу
В заданном одномерном массиве целого типа найти и напечатать те элементы, произведение цифр которых равно заданному числу a, или сообщить,...

19
4866 / 3288 / 468
Регистрация: 10.12.2008
Сообщений: 10,570
15.03.2010, 10:22
memmove ?
быстрее, конечно, перегнать все подходящие числа в другой массив
а потом один раз применить memcpy

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

можно ли например ввести еще один цикл типа:
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;
    }
1
Эксперт С++
 Аватар для CyBOSSeR
2348 / 1721 / 149
Регистрация: 06.03.2009
Сообщений: 3,675
15.03.2010, 20:27
Пушистик,
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;
}
0
 Аватар для Пушистик
8 / 8 / 0
Регистрация: 10.12.2009
Сообщений: 15
15.03.2010, 20:38  [ТС]
CyBOSSeR, а вы не могли бы немного разъяснить???))
1
Эксперт С++
 Аватар для CyBOSSeR
2348 / 1721 / 149
Регистрация: 06.03.2009
Сообщений: 3,675
15.03.2010, 20:39
Пушистик, что конкретно?
0
 Аватар для Пушистик
8 / 8 / 0
Регистрация: 10.12.2009
Сообщений: 15
15.03.2010, 20:42  [ТС]
int Remove(int* arr, int size, int key) вот это не понятно...
result=0 это я так понимаю типа флага???
return size - result;и еще std::cout << arr[i] << " ";
1
Эксперт С++
 Аватар для CyBOSSeR
2348 / 1721 / 149
Регистрация: 06.03.2009
Сообщений: 3,675
15.03.2010, 20:49
Более правильная версия:
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 и пробел.
2
 Аватар для Пушистик
8 / 8 / 0
Регистрация: 10.12.2009
Сообщений: 15
15.03.2010, 20:56  [ТС]
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;
}
}
1
 Аватар для AnonymC
1183 / 468 / 87
Регистрация: 23.06.2009
Сообщений: 6,390
15.03.2010, 22: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;
}
0
 Аватар для Пушистик
8 / 8 / 0
Регистрация: 10.12.2009
Сообщений: 15
16.03.2010, 21:27  [ТС]
МедведЪ, спасибки))

вот что у меня получилось:
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
1
4866 / 3288 / 468
Регистрация: 10.12.2008
Сообщений: 10,570
17.03.2010, 04:51
C
1
2
            for (j = i; j < m; j++) { 
                arr[j] = arr[j + 1];
выход за край

а это
C
1
m--;
не проверяется на выход за левый край массива
чтобы сделать, введи m равное еденице и элемент равный k
1
 Аватар для Пушистик
8 / 8 / 0
Регистрация: 10.12.2009
Сообщений: 15
17.03.2010, 20:18  [ТС]
а что значит,если при m больше диапазона [2,20] он мне на экран кроме сообщения об ошибке выводит какие-то непонятные цифры -858993460???количество этих повторений зависит от введенного m и равно ему...как с этим бороться???))
1
4866 / 3288 / 468
Регистрация: 10.12.2008
Сообщений: 10,570
18.03.2010, 05:14
когда ввёл неправильное m, сразу выходи из программы с return EXIT_FAILURE;
там цикл в конце
0
 Аватар для Пушистик
8 / 8 / 0
Регистрация: 10.12.2009
Сообщений: 15
18.03.2010, 12:34  [ТС]
ммммм,я переставила } в одном месте и все заработало правильно)))
1
 Аватар для grrrrr
49 / 49 / 13
Регистрация: 21.04.2009
Сообщений: 265
18.03.2010, 13:14
CyBOSSeR, привет! Учу С++ уже 200 лет, но ни как не пойму почему ты (и не только ты) в своем коде где объявляешь функцию там ее и описываешь? В книжке написано что надо сначало объявить прототип функции, а потом ее описать. Прочитал недавно что то по встроенные функции у них синтаксис такой же как у тебя, только перед типом возвращаемого значения стоит "волшебное" слово inline.
0
Эксперт С++
 Аватар для fasked
5045 / 2624 / 241
Регистрация: 07.10.2009
Сообщений: 4,310
Записей в блоге: 5
18.03.2010, 13:16
Цитата Сообщение от grrrrr Посмотреть сообщение
Учу С++ уже 200 лет, но ни как не пойму почему ты в своем коде где объявляешь функцию там ее и описываешь? В книжке написано что надо сначало объявить прототип функции, а потом ее описать. Прочитал недавно что то по встроенные функции у них синтаксис такой же как у тебя, только перед типом возвращаемого значения стоит "волшебное" слово inline.
Синтаксис у подставляемых функций такой же как и у обычных.
1
1261 / 799 / 108
Регистрация: 16.09.2009
Сообщений: 2,010
18.03.2010, 13:18
grrrrr:
В данном случаем программа не разбивается на модули *.h и *.cpp: интерфейс и реализацию.
поэтому: то что делает CyBOSSeR особой роли не играет.
Ответ: Объявление и определение.
1
 Аватар для grrrrr
49 / 49 / 13
Регистрация: 21.04.2009
Сообщений: 265
18.03.2010, 13:31
Я как бы так и думал! Просто в книжке так написано вот и спросил. Пока буду придерживаться книжки, т.к. более понятен код для меня. Спасибо!
0
Эксперт С++
 Аватар для fasked
5045 / 2624 / 241
Регистрация: 07.10.2009
Сообщений: 4,310
Записей в блоге: 5
18.03.2010, 13:38
В общем прототипы нужны чтобы можно было использовать функции в любой последовательности:
Например такой вариант будет работоспособен:
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();
}
Поэтому в небольших программках запись с использованием прототипов в принципе и не нужна, если соблюдать правильный порядок объявлений
1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
18.03.2010, 13:38
Помогаю со студенческими работами здесь

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

Напечатать все совершенные числа, меньшие или равные заданному числу
Спасибо заранее тем, кто может помочь У меня есть вопрос, чтобы написать на языке C Напишите функцию, чтобы напечатать все...

Определить есть ли в данном массиве элементы, равные заданному числу
Ввести массив G вещественных чисел. Определить есть ли в данном массиве элементы, равные заданному числу. Заранее большое спасибо!

Функция дублирующая в целочисленном массиве элементы равные заданному числу
Описать процедуру DoubleX(A, N, X), дублирующую в целочисленном массиве A размера N элементы, равные целому числу X. Массив A и число N...

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


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

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Новые блоги и статьи
Воспроизведение звукового файла с помощью SDL3_mixer при касании экрана Android
8Observer8 26.01.2026
Содержание блога SDL3_mixer - это библиотека я для воспроизведения аудио. В отличие от инструкции по добавлению текста код по проигрыванию звука уже содержится в шаблоне примера. Нужно только. . .
Установка Android SDK, NDK, JDK, CMake и т.д.
8Observer8 25.01.2026
Содержание блога Перейдите по ссылке: https:/ / developer. android. com/ studio и в самом низу страницы кликните по архиву "commandlinetools-win-xxxxxx_latest. zip" Извлеките архив и вы увидите. . .
Вывод текста со шрифтом TTF на Android с помощью библиотеки SDL3_ttf
8Observer8 25.01.2026
Содержание блога Если у вас не установлены Android SDK, NDK, JDK, и т. д. то сделайте это по следующей инструкции: Установка Android SDK, NDK, JDK, CMake и т. д. Сборка примера Скачайте. . .
Использование SDL3-callbacks вместо функции main() на Android, Desktop и WebAssembly
8Observer8 24.01.2026
Содержание блога Если вы откроете примеры для начинающих на официальном репозитории SDL3 в папке: examples, то вы увидите, что все примеры используют следующие четыре обязательные функции, а. . .
моя боль
iceja 24.01.2026
Выложила интерполяцию кубическими сплайнами www. iceja. net REST сервисы временно не работают, только через Web. Написала за 56 рабочих часов этот сайт с нуля. При помощи perplexity. ai PRO , при. . .
Модель сукцессии микоризы
anaschu 24.01.2026
Решили писать научную статью с неким РОманом
http://iceja.net/ математические сервисы
iceja 20.01.2026
Обновила свой сайт http:/ / iceja. net/ , приделала Fast Fourier Transform экстраполяцию сигналов. Однако предсказывает далеко не каждый сигнал (см ограничения http:/ / iceja. net/ fourier/ docs ). Также. . .
http://iceja.net/ сервер решения полиномов
iceja 18.01.2026
Выкатила http:/ / iceja. net/ сервер решения полиномов (находит действительные корни полиномов методом Штурма). На сайте документация по API, но скажу прямо VPS слабенький и 200 000 полиномов. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru