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

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

Восстановить пароль Регистрация
 
лизи
 Аватар для лизи
0 / 0 / 0
Регистрация: 14.11.2011
Сообщений: 104
24.03.2012, 22:07     поставить элемент на указанную позицию,файлы,cи #1
нужно написать программу на си
которая ставит некоторую цифру на указнную позицию
проблема как прописать код так чтобы цифра не заменяла то что стоит на укзанной позиции
а смещала то что стоит на этой позиции
пыталась создать временный файл и еще дополнительный массивчик
не получается ничего
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
24.03.2012, 22:07     поставить элемент на указанную позицию,файлы,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++
 Аватар для valeriikozlov
4660 / 2486 / 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++
 Аватар для valeriikozlov
4660 / 2486 / 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++
 Аватар для valeriikozlov
4660 / 2486 / 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++
 Аватар для valeriikozlov
4660 / 2486 / 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++
 Аватар для valeriikozlov
4660 / 2486 / 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++
 Аватар для valeriikozlov
4660 / 2486 / 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и
Еще ссылки по теме:

Поставить последний элемент вектора в середину 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и
Ответ Создать тему
Опции темы

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