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

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

Войти
Регистрация
Восстановить пароль
 
лизи
0 / 0 / 0
Регистрация: 14.11.2011
Сообщений: 104
#1

поставить элемент на указанную позицию,файлы,cи - C++

24.03.2012, 22:07. Просмотров 744. Ответов 14
Метки нет (Все метки)

нужно написать программу на си
которая ставит некоторую цифру на указнную позицию
проблема как прописать код так чтобы цифра не заменяла то что стоит на укзанной позиции
а смещала то что стоит на этой позиции
пыталась создать временный файл и еще дополнительный массивчик
не получается ничего
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
24.03.2012, 22:07     поставить элемент на указанную позицию,файлы,cи
Посмотрите здесь:

C++ Определить последний отрицательный максимальный элемент и его позицию в массиве
C++ Вставить элемент в массив на заданную позицию
Файлы. Как установить позицию в файле? C++
Сделать массив упорядоченным, переместив элемент который нарушает упорядоченность, на новую позицию C++
Массивы (циклическим сдвигом переместить найденный элемент на последнюю позицию) C++
C++ Однонаправленный список. Операции: удалить элемент из заданной позиции, добавить элемент в заданную позицию,проверка на неравенство
Как добавить элемент в конец массива и расширить его на одну позицию? C++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Plazma
5 / 5 / 0
Регистрация: 20.11.2010
Сообщений: 51
24.03.2012, 22:14     поставить элемент на указанную позицию,файлы,cи #2
попробуйте использовать векторы
лизи
0 / 0 / 0
Регистрация: 14.11.2011
Сообщений: 104
24.03.2012, 23:05  [ТС]     поставить элемент на указанную позицию,файлы,cи #3
Plazma, векторы?О_О
впервый раз слышу о таком(
valeriikozlov
Эксперт C++
4663 / 2489 / 321
Регистрация: 18.08.2009
Сообщений: 4,550
24.03.2012, 23:14     поставить элемент на указанную позицию,файлы,cи #4
Цитата Сообщение от лизи Посмотреть сообщение
Plazma, векторы?О_О
впервый раз слышу о таком(
векторы - это уже не си.


Цитата Сообщение от лизи Посмотреть сообщение
пыталась создать временный файл и еще дополнительный массивчик
не получается ничего
покажите что есть
лизи
0 / 0 / 0
Регистрация: 14.11.2011
Сообщений: 104
24.03.2012, 23:35  [ТС]     поставить элемент на указанную позицию,файлы,cи #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
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
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
  #include <stdio.h>  //onn libraries
#include <stdlib.h>
#include <time.h>
 
 
void create(char *name);
void output(char *name);
void add(char *name);
float proizved(char *name);
 
 
void create(char *name)
{
FILE *in;
int n,i;
float a;
 if ((in=fopen(name,"w"))!=NULL)
    {
     printf("Please, input n\n=>");
     scanf("%d",&n);
      for(i=0;i<n;i++)
      {
       printf("\na=");
       scanf("%f",&a);
       fwrite(&a,sizeof(float),1,in);
 
      }
 
 
    }
    else
    printf("Error! File not created!");
  fclose(in);
}
 
void output(char *name)
{
FILE *out;
float a;
if((out=fopen(name,"r"))!=NULL)
    {
      while(!feof(out))
       {
        fread(&a,sizeof(float),1,out);
         if(!feof(out))
          printf("%f   ",a);
       }
      printf("\n");
 
    }
       else
       printf("Error output!");
 fclose(out);
}
 
 float proizved(char *name)
 { float P=1,a;
  FILE *out;
 
if((out=fopen(name,"r"))!=NULL)
    {
      while(!feof(out))
       {
        fread(&a,sizeof(float),1,out);
         if(!feof(out))
          P*=a;
       }
    }
       else
       printf("Error proived!");
 
 return P;
 fclose(out);
 
 }
 
 void add(char *name)
 {
  int N,i;FILE *out;float P;
 
if((out=fopen(name,"r+"))!=NULL)
    {
     P=proizved(name);
     printf("\nPlease, input N\n=>");
     scanf("%d",&N);
     fseek(out,N*sizeof(float),SEEK_SET);
 
     fwrite(&P,sizeof(float),1,out);
     //for(i=0;i<N;i++)
    // for(i=0;i>N;i--)
     //fwrite(&a,sizeof(float),1,out);
    // i=N;
     //if(out=fopen(name,r++))!=NULL;
    // N=filelenght(fileno(out))(sizeof(int)));
     //if(i<N-1)
//file close(int),1,out;
     //fread(&a,sizeof(int),1,out);}
     //fseek(out,i*sizeof(int),SEEK_SET);
     //fwrite(&a,sizeof(int),1,out);
    //fseek(out,(i=N*sizeof(int),SEEK_SET);
 //}
 
 
    }
       else
       printf("Error adding!");
 
 fclose(out);
 }
 
int main()
{int flag;
do{
create("example");
add("example");
output("example");
 printf("\nInput '0' if you want to exit=>");
scanf("%d",&flag);
} while(flag!=0);
return 1;
}
valeriikozlov
Эксперт C++
4663 / 2489 / 321
Регистрация: 18.08.2009
Сообщений: 4,550
24.03.2012, 23:42     поставить элемент на указанную позицию,файлы,cи #6
Два вопроса:
- обязательно ли использовать файлы?
- как звучит полностью задание?
лизи
0 / 0 / 0
Регистрация: 14.11.2011
Сообщений: 104
24.03.2012, 23:50  [ТС]     поставить элемент на указанную позицию,файлы,cи #7
valeriikozlov, да файлы обязательно использовать
задание:
Дан файл f, компоненты которого являются действительными числами. Найти:
Произведение компонент файла f. Записать это произведение после компоненты с номером N.
Программа должна быть разбита на несколько функций и обязательно содержать:
1. Функция формирования исходного файла;
2. Функция вывода результата работы программы;
3. Одну или более функций, реализующих вычислительную часть алгоритма.
Основная программа должна содержать только операторы вызова подпрограмм.
valeriikozlov
Эксперт C++
4663 / 2489 / 321
Регистрация: 18.08.2009
Сообщений: 4,550
25.03.2012, 00:14     поставить элемент на указанную позицию,файлы,cи #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
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
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
  #include <stdio.h>  //onn libraries
#include <stdlib.h>
#include <time.h>
 
 
int create(char *name);
void output(char *name);
void add(char *name);
float proizved(char *name);
 
 
int create(char *name)
{
FILE *in;
int n,i;
float a;
 if ((in=fopen(name,"w"))!=NULL)
        {
         printf("Please, input n\n=>");
         scanf("%d",&n);
          for(i=0;i<n;i++)
          {
           printf("\na=");
           scanf("%f",&a);
           fwrite(&a,sizeof(float),1,in);
 
          }
 
 
        }
        else
        printf("Error! File not created!");
  fclose(in);
  return n;
}
 
void output(char *name)
{
FILE *out;
float a;
if((out=fopen(name,"r"))!=NULL)
        {
          while(!feof(out))
           {
            fread(&a,sizeof(float),1,out);
             if(!feof(out))
              printf("%f   ",a);
           }
          printf("\n");
 
        }
       else
       printf("Error output!");
 fclose(out);
}
 
 float proizved(char *name)
 { float P=1,a;
  FILE *out;
 
if((out=fopen(name,"r"))!=NULL)
        {
          while(!feof(out))
           {
            fread(&a,sizeof(float),1,out);
             if(!feof(out))
              P*=a;
           }
        }
       else
       printf("Error proived!");
 
 return P;
 fclose(out);
 
 }
 
 void add(char *name, int n)
 {
  int N,i;float P;
 
        P=proizved(name);
         printf("\nPlease, input N\n=>");
         scanf("%d",&N);
         float *a=(float*)malloc (n* sizeof(float));
         FILE *out;
         if((out=fopen(name,"r"))!=NULL)
         {
             for(i=0; i<n; i++)
                 fread(&a[i],sizeof(float),1,out);
         }
         else
             printf("Error adding!");
         fclose(out);
         FILE *in;
         if ((in=fopen(name,"w"))!=NULL)
         {
             for(i=0;i<n && i<=N;i++)
             {
                 fwrite(&a[i],sizeof(float),1,in);               
             } 
             fwrite(&P,sizeof(float),1,in); 
             for(;i<n;i++)
             {
                 fwrite(&a[i],sizeof(float),1,in);               
             } 
        }
        else
        printf("Error adding!");
        fclose(in);     
        free(a);
 }
 
int main()
{int flag, n;
do{
n=create("example");
add("example", n);
output("example");
 printf("\nInput '0' if you want to exit=>");
s
лизи
0 / 0 / 0
Регистрация: 14.11.2011
Сообщений: 104
25.03.2012, 00:27  [ТС]     поставить элемент на указанную позицию,файлы,cи #9
valeriikozlov, исправила ошибки,запустила,вылетает=(
valeriikozlov
Эксперт C++
4663 / 2489 / 321
Регистрация: 18.08.2009
Сообщений: 4,550
25.03.2012, 07:59     поставить элемент на указанную позицию,файлы,cи #10
Цитата Сообщение от лизи Посмотреть сообщение
исправила ошибки,запустила,вылетает=(
покажите последнюю версию, которая вылетает.
лизи
0 / 0 / 0
Регистрация: 14.11.2011
Сообщений: 104
25.03.2012, 13:27  [ТС]     поставить элемент на указанную позицию,файлы,cи #11
valeriikozlov,
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
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
 #include <stdio.h>  //onn libraries
#include <stdlib.h>
#include <time.h>
 
 
int create(char *name);
void output(char *name);
void add(char *name);
float proizved(char *name);
 
 
int create(char *name)
{
FILE *in;
int n,i;
float a;
 if ((in=fopen(name,"w"))!=NULL)
        {
         printf("Please, input n\n=>");
         scanf("%d",&n);
          for(i=0;i<n;i++)
          {
           printf("\na=");
           scanf("%f",&a);
           fwrite(&a,sizeof(float),1,in);
 
          }
 
 
        }
        else
        printf("Error! File not created!");
  fclose(in);
  return n;
}
 
void output(char *name)
{
FILE *out;
float a;
if((out=fopen(name,"r"))!=NULL)
        {
          while(!feof(out))
           {
            fread(&a,sizeof(float),1,out);
             if(!feof(out))
              printf("%f   ",a);
           }
          printf("\n");
 
        }
       else
       printf("Error output!");
 fclose(out);
}
 
 float proizved(char *name)
 { float P=1,a;
  FILE *out;
 
if((out=fopen(name,"r"))!=NULL)
        {
          while(!feof(out))
           {
            fread(&a,sizeof(float),1,out);
             if(!feof(out))
              P*=a;
           }
        }
       else
       printf("Error proived!");
 
 return P;
 fclose(out);
 
 }
 
 void add(char *name)
 {
  int N,n,i;float P;
 
 
        P=proizved(name);
         printf("\nPlease, input N\n=>");
         scanf("%d",&N);
                 float *a=(float*)malloc (n* sizeof(float));
                 FILE *out;
                 if((out=fopen(name,"r"))!=NULL)
                 {
                         for(i=0; i<n; i++)
                                 fread(&a[i],sizeof(float),1,out);
                 }
                 else
                         printf("Error adding!");
                 fclose(out);
                 FILE *in;
                 if ((in=fopen(name,"w"))!=NULL)
                 {
                         for(i=0;i<n && i<=N;i++)
                         {
                                 fwrite(&a[i],sizeof(float),1,in);
                         }
                         fwrite(&P,sizeof(float),1,in);
                         for(;i<n;i++)
                         {
                                 fwrite(&a[i],sizeof(float),1,in);
                         }
        }
        else
        printf("Error adding!");
                fclose(in);
                free(a);
 }
 
int main()
{int flag, n;
do{
n=create("example");
add("example");
output("example");
 printf("\nInput '0' if you want to exit=>");
 scanf("%d",&flag);
} while(flag!=0);
return 1;
}
после того как ввожу позицию вылетает
valeriikozlov
Эксперт C++
4663 / 2489 / 321
Регистрация: 18.08.2009
Сообщений: 4,550
25.03.2012, 13:46     поставить элемент на указанную позицию,файлы,cи #12
Цитата Сообщение от лизи Посмотреть сообщение
после того как ввожу позицию вылетает
так и должно быть. переделали add() так, что создаете массив размером n, когда n неинициализировано (не имеет значения).
пробуйте:
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
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
 #include <stdio.h>  //onn libraries
#include <stdlib.h>
#include <time.h>
 
 
int create(char *name);
void output(char *name);
void add(char *name, int n);
float proizved(char *name);
 
 
int create(char *name)
{
FILE *in;
int n,i;
float a;
 if ((in=fopen(name,"w"))!=NULL)
        {
         printf("Please, input n\n=>");
         scanf("%d",&n);
          for(i=0;i<n;i++)
          {
           printf("\na=");
           scanf("%f",&a);
           fwrite(&a,sizeof(float),1,in);
 
          }
 
 
        }
        else
        printf("Error! File not created!");
  fclose(in);
  return n;
}
 
void output(char *name)
{
FILE *out;
float a;
if((out=fopen(name,"r"))!=NULL)
        {
          while(!feof(out))
           {
            fread(&a,sizeof(float),1,out);
             if(!feof(out))
              printf("%f   ",a);
           }
          printf("\n");
 
        }
       else
       printf("Error output!");
 fclose(out);
}
 
 float proizved(char *name)
 { float P=1,a;
  FILE *out;
 
if((out=fopen(name,"r"))!=NULL)
        {
          while(!feof(out))
           {
            fread(&a,sizeof(float),1,out);
             if(!feof(out))
              P*=a;
           }
        }
       else
       printf("Error proived!");
 
 return P;
 fclose(out);
 
 }
 
 void add(char *name, int n)
 {
  int N,i;float P;
 
 
        P=proizved(name);
         printf("\nPlease, input N\n=>");
         scanf("%d",&N);
                 float *a=(float*)malloc (n* sizeof(float));
                 FILE *out;
                 if((out=fopen(name,"r"))!=NULL)
                 {
                         for(i=0; i<n; i++)
                                 fread(&a[i],sizeof(float),1,out);
                 }
                 else
                         printf("Error adding!");
                 fclose(out);
                 FILE *in;
                 if ((in=fopen(name,"w"))!=NULL)
                 {
                         for(i=0;i<n && i<N;i++)
                         {
                                 fwrite(&a[i],sizeof(float),1,in);
                         }
                         fwrite(&P,sizeof(float),1,in);
                         for(;i<n;i++)
                         {
                                 fwrite(&a[i],sizeof(float),1,in);
                         }
        }
        else
        printf("Error adding!");
                fclose(in);
                free(a);
 }
 
int main()
{int flag, n;
do{
n=create("example");
add("example", n);
output("example");
 printf("\nInput '0' if you want to exit=>");
 scanf("%d",&flag);
} while(flag!=0);
return 1;
}
лизи
0 / 0 / 0
Регистрация: 14.11.2011
Сообщений: 104
25.03.2012, 13:55  [ТС]     поставить элемент на указанную позицию,файлы,cи #13
valeriikozlov, работает
токо вы не могли бы еще раз объяснить что вы изменили
valeriikozlov
Эксперт C++
4663 / 2489 / 321
Регистрация: 18.08.2009
Сообщений: 4,550
25.03.2012, 14:25     поставить элемент на указанную позицию,файлы,cи #14
Цитата Сообщение от лизи Посмотреть сообщение
токо вы не могли бы еще раз объяснить что вы изменили
если коротко, то вот что:

Цитата Сообщение от valeriikozlov Посмотреть сообщение
int create(char *name);
теперь стала не просто создавать массив размерностью n, но и возвращать это значение. Это значение теперь передается в add(), где создается массив размерность n. В этот массив считываются данные из файла, потом записываются обратно в файл, с временной остановкой чтобы записать произведение элементов в указанном месте.
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
25.03.2012, 14:34     поставить элемент на указанную позицию,файлы,cи
Еще ссылки по теме:

Массив А из n чисел. Вставить в указанную пользователем позицию массива значение C++
C++ Вставить в указанную пользователем позицию в массиве значение
C++ Написать функцию, вставляющую строку в указанную позицию двумерного массива
C++ Добавить новый элемент в определенную позицию массива объектов
C++ Функция добавления элемента в односвязный список в указанную позицию

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

Или воспользуйтесь поиском по форуму:
лизи
0 / 0 / 0
Регистрация: 14.11.2011
Сообщений: 104
25.03.2012, 14:34  [ТС]     поставить элемент на указанную позицию,файлы,cи #15
valeriikozlov, спасибоо)
Yandex
Объявления
25.03.2012, 14:34     поставить элемент на указанную позицию,файлы,cи
Ответ Создать тему
Опции темы

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