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

Работа с массивом. Ввести число x и продублировать каждый элемент массива, превосходящий x - C++

Восстановить пароль Регистрация
 
tulyak
0 / 0 / 0
Регистрация: 25.02.2013
Сообщений: 3
08.04.2013, 13:03     Работа с массивом. Ввести число x и продублировать каждый элемент массива, превосходящий x #1
Есть такая задача: введите с клавиатуры число x и продублируйте каждый элемент массива, превосходящий x(т.е. вставьте рядом такой же элемент). Массив считывается из файла.
Вот мой незавершенный вариант задачи, собственно затык произошел в написании функции сдвига массива, в сравнении элементов и дублировании. Есть какие мысли по решению задачи?
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
int main()
{
int *mas;
int i,N,x;
FILE *in, *out;
in=fopen("input.txt","r");
if(in==NULL)
{}
out=fopen("output.txt", "w");
fscanf(in,"%d",&N);
mas=(int *)malloc(sizeof(int)*N*2);
printf("enter integer number: ");
scanf("%d", &x);
for (i=0;i<N;i++)
        if(fscanf(in,"%d", &mas[i]) !=1)
         printf("error1");
for (i=0;i<N;i++)
        if (x==mas[i])
 
 
}
 
fclose(in);
fclose(out);
return 0;
}
Добавлено через 56 минут
вот дописал функцию сдвига, но дальше несовсем ясно
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
 int * sdvig( int *start, int size, int a )
{
    int *result = new int[size];
    int i;
    for( i = 0; i < size; i++ )
        *( result + i ) = *( start + i );
    while( a-- )
    {
        int tmp = *result;
        int *r = result;
        for( i = 0; i < size - 1; i++ )
            *( r + i ) = *( r + i + 1 );
        *( r + i ) = tmp;
    }
    return result;
}
 
 
int main()
{
int *mas;
int i,N,x;
FILE *in, *out;
in=fopen("input.txt","r");
if(in==NULL)
{}
out=fopen("output.txt", "w");
fscanf(in,"%d",&N);
mas=(int *)malloc(sizeof(int)*N*2);
printf("enter integer number: ");
scanf("%d", &x);
for (i=0;i<N;i++)
        if(fscanf(in,"%d", &mas[i]) !=1)
         printf("error1");
for (i=0;i<N;i++)
        if (x==mas[i])
       sdvig();
       mas[i+1]=mas[i];
 
 
 
fclose(in);
fclose(out);
return 0;
}
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
08.04.2013, 13:03     Работа с массивом. Ввести число x и продублировать каждый элемент массива, превосходящий x
Посмотрите здесь:

разделить каждый элемент массива C++
Работа с массивом.Разделить элементы K-ой строки на диагональный элемент массива C++
C++ Ввести символьную строку. Распечатать каждый символ массива с новой строки
C++ Введите с клавиатуры число х и удалите из массива каждый элемент, делящийся нацело на х, а оставшиеся уплотните к началу массива
C++ Если число отрицательных элементов матрицы превышает число положительных, увеличить каждый её элемент на величину среднего арифметического её элем-ов
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
prospector
 Аватар для prospector
7 / 7 / 0
Регистрация: 23.03.2013
Сообщений: 17
08.04.2013, 14:25     Работа с массивом. Ввести число x и продублировать каждый элемент массива, превосходящий x #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
#include <fstream>
#include <iostream>
#include <vector>
 
using namespace std;
 
int main()
{
  int x;
  cin >> x;
 
  ifstream in("/path/input.txt");
  vector<int> vin, vout;
  int i;
  while(in >> i) vin.push_back(i);
 
  for (vector<int>::size_type i = 0 ; i != vin.size(); i++) {
    if (vin[i] > x) vout.push_back(vin[i]);
    vout.push_back(vin[i]);
  }
 
  ofstream out("/path/output.txt");
  for (vector<int>::size_type i = 0 ; i != vout.size(); i++) {
    out << vout[i] << endl;
  }
}
tulyak
0 / 0 / 0
Регистрация: 25.02.2013
Сообщений: 3
08.04.2013, 14:31  [ТС]     Работа с массивом. Ввести число x и продублировать каждый элемент массива, превосходящий x #3
Цитата Сообщение от prospector Посмотреть сообщение
"Лобовой" вариант, с двумя векторами и безо всяких проверок:

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 <fstream>
#include <iostream>
#include <vector>
 
using namespace std;
 
int main()
{
  int x;
  cin >> x;
 
  ifstream in("/path/input.txt");
  vector<int> vin, vout;
  int i;
  while(in >> i) vin.push_back(i);
 
  for (vector<int>::size_type i = 0 ; i != vin.size(); i++) {
    if (vin[i] > x) vout.push_back(vin[i]);
    vout.push_back(vin[i]);
  }
 
  ofstream out("/path/output.txt");
  for (vector<int>::size_type i = 0 ; i != vout.size(); i++) {
    out << vout[i] << endl;
  }
}
а чем плох предыдущий вариант? кстати, я тут пока сидел думал...переписал задачу...но работает она некорректно(
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
#include <vcl.h>
#pragma hdrstop
#include <stdio.h>
 
//---------------------------------------------------------------------------
 
#pragma argsused
int sdvig( int mas[], int N){ //функция смещение на 1 вправо
     int temp=mas[0];
     for (int i=N-1; i>0;i--) mas[i]=mas[i-1];
     mas[0]=temp;
}
 
int main()
{
int *mas;
int i,N,x;
FILE *in, *out;
in=fopen("input.txt","r");
if(in==NULL)
{}
out=fopen("output.txt", "w");
if (fscanf(in,"%d",&N) !=1)
printf("error2");
mas=(int *)malloc(sizeof(int)*N*2);
for (i=0;i<N;i++){
fscanf(in,"%d",&mas[i]);}
printf("%d\n", N);
for (i=0;i<N;i++)
printf("%d\n",mas[i]);
printf("enter integer number: ");
scanf("%d", &x);
for (i=0;i<N;i++)
       { if (x==mas[i])
       sdvig(mas,N);
       mas[i]=mas[i+1]; }
   for (i=0;i<N;i++){
    fprintf(out,"%d\n",mas[i]);}
 
 
 
fclose(in);
fclose(out);
return 0;
}
prospector
 Аватар для prospector
7 / 7 / 0
Регистрация: 23.03.2013
Сообщений: 17
08.04.2013, 16:21     Работа с массивом. Ввести число x и продублировать каждый элемент массива, превосходящий x #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
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
#include <stdio.h>
#include <stdlib.h>
 
int main()
{
  FILE *in, *out;
  int i, x, a, size = 0;
  int *mas;
 
  in = fopen("input.txt","r");
  /* считаем количество чисел в файле */
  fscanf(in, "%d", &i);    
  while (!feof(in)) {  
    ++size;
    fscanf (in, "%d", &i);      
  }
 
  /* создадим массив размера size*2 */
  int new_size = size*2;
  mas = (int *) malloc(sizeof(int)*new_size);
 
  /* введем число для проверки */
  printf("enter integer number: ");
  scanf("%d", &x);
 
  /* считаем числа из файла в массив */
  fseek (in, 0, SEEK_SET);
  i = 0;
  while(fscanf(in, "%d", &a) == 1 ){
    if (a > x) mas[i++] = a;
    mas[i++] = a;
  }
  fclose(in);
 
  /* Сохраним массив в файл */
  out = fopen("output.txt", "w");
  for (i = 0; i < new_size; i++)
    fprintf(out,"%d\n",mas[i]);
  fclose(out);
 
  return 0;
}
Yandex
Объявления
08.04.2013, 16:21     Работа с массивом. Ввести число x и продублировать каждый элемент массива, превосходящий x
Ответ Создать тему
Опции темы

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