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

—++ дл€ начинающих

¬ойти
–егистраци€
¬осстановить пароль
 
 
–ейтинг: –ейтинг темы: голосов - 10, средн€€ оценка - 4.60
”ль€ниус
1 / 1 / 0
–егистраци€: 15.08.2013
—ообщений: 132
#1

ѕри передаче в функцию динамического массива, в массиве искажаютс€ данные - C++

29.04.2014, 10:11. ѕросмотров 1390. ќтветов 42
ћетки нет (¬се метки)

ћне необходимо построить код Ўеннона, на основе псевдокода, предложенного в лекции (кодирую текст на английском алфавите).
ѕри создании кода Ўеннона столкнулась с такой проблемой: при передаче в функцию массива CHAR_S (динамический массив, содержащий в упор€доченном виде символы, встречающиес€ в файле) и ws (упор€доченный массив частот) в функцию
C++
1
Lsh=Shennon(p,N,CHAR_S,ws)
часть данных искажаетс€, подскажите, пожалуйста, с чем это может быть св€зано?  ак только эти массивы оказываютс€ в функции, данные в них уже неправильные.
ƒо передачи в функцию CHAR_S[N]:

ѕри передаче в функцию динамического массива, в массиве искажаютс€ данные

ѕосле передачи:
ѕри передаче в функцию динамического массива, в массиве искажаютс€ данные

ƒо передачи в функцию ws[N]:

ѕри передаче в функцию динамического массива, в массиве искажаютс€ данные

ѕосле передачи в функцию, в массиве ws, вообще кака€ то ерунда:

ѕри передаче в функцию динамического массива, в массиве искажаютс€ данные

ƒалее, внутри функции Shennon(p,N,CHAR_S,ws) происходит искажение массива L[N]. “ак выгл€дит массив сразу после окончани€ заполнени€:

ѕри передаче в функцию динамического массива, в массиве искажаютс€ данные

Ќо уже после выполнени€ следующих операций данные в массиве L искажаютс€ при i=0:

ѕри передаче в функцию динамического массива, в массиве искажаютс€ данные

i=5

ѕри передаче в функцию динамического массива, в массиве искажаютс€ данные

ѕодскажите, пожалуйста, в чем может быть проблема?
‘айл NEW прикреплен к теме: Ќе считает произведение разных типов данных
¬ целом рабочий код € приведу ниже, комментарии на русском, в компил€торе читаемы, а при переносе в блокнот и в ворд нечитаемы, поэтому прошу не ругатьс€, все комментарии переписывать, это с ума сойти, прошу лишь загрузить в компил€тор, чтобы проверить, что код реально рабочий, и то может и не понадобитс€ код вовсе, а знающим люд€м итак будет пон€тно в чем причина.
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
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
#include <stdio.h>
#include <string.h>
#include <conio.h>
#include <math.h>
#include <stdlib.h>
#include <alloc.h>
 
#define n 94 //™ЃЂ®з•б⥁ б®ђҐЃЂЃҐ Ґ  *£Ђ®©б™Ѓђ  Ђд Ґ®в• 32 ѓЃ 126 ™Ѓ§ б®ђҐЃЂ   в °Ђ®жл ASCII
 
 
void swap (long *w, char *CHAR, long i, long j) //Ѓ°ђ•* нЂ•ђ•*вЃҐ ђ бᮥ 
 {
  long t; char T;
  t=w[i];
  w[i]=w[j];
  w[j]=t;
  T=CHAR[i];
  CHAR[i]=CHAR[j];
  CHAR[j]=T;
 }
 
void shake (long *x, char *CHAR) //§Ђп гѓЃап§Ѓз•*®п ђ бᮥ  Ґ•аЃпв*Ѓбв•© ѓЃ ҐЃІа бв *®о ®бѓЃЂмІг•ђ и•©™•а*го бЃав®аЃҐ™г
  {
   long L,R,N,S,j,i;
   L=0;  //Ђ•Ґ п £а *®ж  ђ бᮥ 
   R=n-1;  //ѓа Ґ п £а *®ж  ђ бᮥ 
   N=n-1;    //™ЃЂ®з•б⥁ нЂ•ђ•*вЃҐ ђ бᮥ  (*гђ•а ж®п б 0)
   while (L<R)
   {
    for(j=R; j>L; --j)  //ѓаЃеЃ§ бѓа Ґ  * Ђ•ҐЃ
    {
     if (x[j]>x[j-1])
     {
      swap(x,CHAR,j,j-1);
      N=j;
     }
    }
    L=N;
     for (j=L; j<R; ++j)  //ѓаЃеЃ§ бЂ•Ґ  * ѓа ҐЃ
     {
      if (x[j]<x[j+1])
      {
       swap(x,CHAR,j,j+1);
       N=j;
      }
     }
     R=N;
   }
   for (i=0,S=1;i<n-2;++i)
   {
   if (x[i]<x[i+1])
     S++;
   }
  if (S>1)
   {
    printf("\n Ои®°™ , ђ бᮥ *• ЃвбЃав®аЃҐ *, ™ЃЂ®з•б⥁ б•а®© °ЃЂми• 1 \n");
    getch();
   }
  }
 
 
void create_Mas1 (long *L, long N)
{
 L=(long *)malloc(N*sizeof(long)); //бЃІ§ *®• ђ бᮥ  §Ђ®** ™Ѓ§ЃҐле бЂЃҐ
 if (L==NULL)
 {
  puts("О§*Ѓђ•а*л© ђ бᮥ *• бЃІ§ *!");
  getch();
  return;
 }
}
 
void create_Mas2 (int **C,long N)
{
 long i;
 C=(int**)malloc(N*sizeof(int*)); //бЃІ§ *®• §®* ђ®з ђ бᮥ  г™ І в•Ђ•© *  г™ І в•Ђ® * з Ђ  бваЃ™
 if (C==NULL)
 {
  puts("М бᮥ г™ І в•Ђ•© бваЃ™ С *• бЃІ§ *!");
  getch();
  return;
 }
 for (i=0;i<N;i++)//Ґл§•Ђп•ђ ѓ ђпвм ѓЃ§ N ђ бᮥЃҐ -бваЃ™ ѓЃ N нЂ•ђ•*вЃҐ Ґ ™ ¶§Ѓђ
 {
  C[i]=(int *)malloc(N*sizeof(int*));
  if (C[i]==NULL)
  {
   puts("М бᮥ С *• бЃІ§ *!");
   return;
  }
  }
}
 
 
void print (char *CHAR_S, long *ws, long *L, int **C, long N)
{
 FILE *fw;
 long i,j,l;
 fw=fopen("COD_H.txt","a");//І ѓ®бм Ґ д ©Ђ
 if (fw==NULL)
  {
   printf("\n Ои®°™  бЃІ§ *®п д ©Ђ ! \n");
   getch();
   exit(0);
  }
 printf ("\n С®ђҐЃЂ   Ч бвЃв    КЃ§ЃҐЃ• бЂЃҐЃ   ДЂ®**  ™Ѓ§ЃҐЃ£Ѓ");
 printf ("\n                                    бЂЃҐ ");
 fprintf(fw,"\n Symbol   Frequency   Codeword   Codeword lenght");
 for(i=0; i<N; i++)
 {
  printf ("\n %c        %d          ", CHAR_S[i], ws[i] );
  fprintf(fw, "\n %c        %d          ", CHAR_S[i], ws[i] );
  l=L[i];
  for (j=0;j<l;j++)
    {
     printf ("%d",C[i][j]);
     fprintf(fw,"%d",C[i][j]);
    }
  printf ("                   %d",L[i] );
  fprintf(fw,"                   %d",L[i] );
 }
}
 
 
float Shennon (float *p, long N,char *CHAR_S, long *ws)
{
 float *Q,    //ђ бᮥ §Ђп Ґ•Ђ®з®* Qi
       Lsh=0;
 int **C; //ђ ва®ж  нЂ•ђ•*в а*ле ™Ѓ§ЃҐ
 long *L, //ђ бᮥ §Ђ®* ™Ѓ§ЃҐле бЂЃҐ
      i,j;//бз•вз®™®
 create_Mas1(L,N);
 create_Mas2(C,N);
 Q=(float *)malloc(N*sizeof(float)); //бЃІ§ *®• ђ бᮥ  §Ђ®** ™Ѓ§ЃҐле бЂЃҐ
 if (Q==NULL)
 {
  puts("О§*Ѓђ•а*л© ђ бᮥ *• бЃІ§ *!");
  getch();
  return 0;
 }
 Q[0]=0;
 for (i=1; i<N; i++)
 {
  Q[i]=Q[i-1]+p[i];
 }
 for (i=0; i<N; i++)
 {
  L[i]=-ceil(log(p[i])/log(2.0));
  if(1.0/pow(2,-1*L[i])>p[i])
    L[i]++;
  if (i==0)
    L[i-1]=1;
  if (1.0/pow(2,-1.0*L[i-1])<p[i])
   printf("\n Н•ѓа Ґ®Ђм*Ѓ а ббз®в *  §Ђ®*  ™Ѓ§ЃҐЃ£Ѓ бЂЃҐ  Ш•**Ѓ* !!!");
 }
 for (i=0; i<N; i++)
 {
  for (j=0;j<L[i];j++)
  {
   Q[i-1]=Q[i-1]*2.0;
   C[i][j]=(int)(Q[i-1]);
   if(Q[i-1]>1.0)
    Q[i-1]=Q[i-1]-1.0;
  }
 }
 
 for (i=1; i<N; i++)
 {
  Lsh+=p[i]*L[i];
 }
 print (CHAR_S,ws,L,C,N);
 for (i=0;i<N;i++)
  free(C[i]);
 free(C);
 free(L);
 free(Q);
 return Lsh;
}
 
 
 
 
void main()
{
 FILE  *f,*fw;
 char  key, ch,
    fname[50], //ђ бᮥ §Ђп еа *•*®п ®ђ•*® д ©Ђ 
    CHAR[n],  //ђ бᮥ Ґб•е б®ђҐЃЂЃҐ  *£Ђ®©б™Ѓ£Ѓ  Ђд Ґ®в 
    *CHAR_S, //ђ бᮥ §Ђп еа *•*®п б®ђҐЃЂЃҐ Ґбва•з ой®ебп Ґ д ©Ђ•
    COD,COD1; //ѓ•а•ђ•** п §Ђп ҐлҐЃ§ ™Ѓ§ЃҐле бЂЃҐ *  ѓ•з вм
 long  i,j,m,N,B, //ѓ•а•ђ•**л• бз•вз®™®
    w[n], //з бвЃвл ѓЃпҐЂ•*®п б®ђҐЃЂЃҐ Ґ в•™бв•
    *ws;//ЃвбЃав®аЃҐ **л© ђ бᮥ з бвЃв
 float *p,//ђ бᮥ Ґ•аЃпв*Ѓбв•© ѓЃпҐЂ•*®п б®ђҐЃЂ  Ґ § **Ѓђ в•™бв•
    H=0.0,//н*ваЃѓ®п Ш•**Ѓ* 
    Lsh, //ба•§*пп §Ђ®**  ™Ѓ§ЃҐЃ£Ѓ бЂЃҐ  Ш•**Ѓ* 
    s;//™Ѓ*ваЃЂм ѓа Ґ®Ђм*Ѓбв® а бз•в  ђ бᮥ  Ґ•аЃпв*Ѓбв•©
 memset(CHAR,0 ,sizeof(CHAR));
 for(i=0;i<n;i++)//І ѓЃЂ*•*®• ђ бᮥ  ™Ѓ§ ђ® б®ђҐЃЂЃҐ бЃ£Ђ б*Ѓ в °Ђ®ж• ASCII
 {
  CHAR[i]=32+i;
 }
 
 fw=fopen("COD_H.txt","w");//бЃІ§ *®• д ©Ђ  §Ђп ҐлҐЃ§  ®*дЃађ ж®®
 fclose(fw);
 do
 {
  clrscr();
  m=0;  //І* з•*®п Ѓ°*гЂповбп §Ђп ®б™Ђоз•*®п Ѓи®°Ѓ™ ѓа® Ѓв™алв®® §аг£Ѓ£Ѓ д ©Ђ 
  N=0; //™ЃЂ®з•б⥁ б®ђҐЃЂЃҐ Ґ в•™бв• ®б™Ђоз п ѓЃҐвЃа•*®п
  memset(w,0.0,sizeof(w));
  memset(fname,0,sizeof(fname));
  printf ("\n ВҐ•§®в• * ®ђ•*ЃҐ *®• д ©Ђ  ® ѓгвм ™ *•ђг. \n");
  fgets(fname,sizeof(fname),stdin);
  m=strlen(fname);
  fname[m-1]=0;
  f=fopen(fname,"rt") ;
  if (f==NULL)
  {
   printf("\n Ои®°™  Ѓв™алв®п д ©Ђ ! \n");
   getch();
   exit(0);
  }
  B=0; // ™ЃЂ®з•б⥁ б®ђҐЃЂЃҐ Ґ в•™бв•
  while(!feof(f))
  {
   ch=getc(f);    //бз®влҐ *®• б®ђҐЃЂЃҐ
   B++;
   for (j=0;j<n;j++)
   {
    if (ch==CHAR[j])
    {
     i=j;
     break;
    }
   }
   w[i]+=1;
 }
 B--;
 
 shake(w,CHAR);//бЃав®аЃҐ™  ђ бᮥ  з бвЃв
 
 for (i=0; i<n; i++)
 {
  if (w[i]!=0)
   N++;
 }
 
 ws=(long *)malloc(N*sizeof(long));
 if (ws==NULL)
 {
  puts("М бᮥ ws *• бЃІ§ *!");
  getch();
  return;
 };
 
 CHAR_S=(char *)malloc(N*sizeof(char));
 if (CHAR_S==NULL)
 {
  puts("М бᮥ CHAR_S *• бЃІ§ *!");
  getch();
  return;
 }
 for (i=0; i<N; i++)//™Ѓѓ®аЃҐ *®• б®ђҐЃЂЃҐ б з бвЃвЃ© ѓЃпЂҐ•*®п >0 Ґ §®* ђ®з•б™®© ђ бᮥ
 {
   ws[i]=w[i];
   CHAR_S[i]=CHAR[i];
 }
 
 
 p=(float *)malloc(N*sizeof(float)) ;
 if (p==NULL)
 {
  puts("М бᮥ p *• бЃІ§ *!");
  getch();
  return;
 }
for (i=0; i<N; i++) //а ббз•в н*ваЃѓ®® д ©Ђ 
 {
  p[i]=1.0*ws[i]/B;//І ѓЃЂ*•*®• ђ бᮥ  Ґ•аЃпв*Ѓбв•© ѓЃпҐЂ•*®п б®ђҐЃЂЃҐ
  H+=-1.0*p[i]*log(p[i])/log(2.0);
 }
 
 Lsh=Shennon(p,N,CHAR_S,ws);
 
 fw=fopen("COD_H.txt","a");
 printf ("\n Э*ваЃѓ®п ®беЃ§*Ѓ£Ѓ   Са•§*пп §Ђ®*  ™Ѓ§ЃҐЃ£Ѓ бЂЃҐ ");
 printf ("\n       в•™бв          КЃ§ Х ддђ *   КЃ§ Ш•**Ѓ*   КЃ§ Ф *Ѓ");
 printf("\n       %2.4f           %2.4f            %2.4f     %2.4f", H,Lh,Lsh,Lf);
 
 fprintf(fw, "\n Entropy of the    Average lenght codeword ");
 fprintf(fw, "\n sourse text       Haffman cod   Shennon cod   Fano cod");
 fprintf(fw,"\n       %2.4f           %2.4f            %2.4f     %2.4f",H,Lh,Lsh,Lf);
 fclose(fw);
 
 //ЃбҐЃ°Ѓ¶§•*®• ѓ ђпв® Ѓв бЃІ§ **ле §®* ђ®з•б™®е ђ бᮥЃҐ
 fclose(f);
 free(p);
 free(CHAR_S);
 free(ws);
 getch();
 fclose(f);
 puts ("\n Ов™алвм §аг£Ѓ© д ©Ђ? (Н•в=Esc)");
 key=getch();
 }
 while (key!=27);//ESC
}
Similar
Ёксперт
41792 / 34177 / 6122
–егистраци€: 12.04.2006
—ообщений: 57,940
29.04.2014, 10:11
«дравствуйте! я подобрал дл€ вас темы с ответами на вопрос ѕри передаче в функцию динамического массива, в массиве искажаютс€ данные (C++):

¬ыдает ошибку при передаче массива в функцию - C++
–угаетс€ на 59 строку: 2.cpp(59): error C2664: otn: невозможно преобразовать параметр 4 из &quot;double **&quot; в &quot;double&quot; Ќе существует...

ћусор в элементах массива при передаче в функцию - C++
ƒоброго времени суток, столкнулс€ с данной проблемой в CLI, попробовал реализовать аналог дл€ консольного приложени€ всЄ работает, почему...

ќшибка при передаче двумерного массива в функцию - C++
cannot convert 'int (*)' to 'int**' for argument '1' to 'void func(int**, int, int)' #include&lt;iostream&gt; using namespace std; ...

ќшибка при передаче двумерного массива в функцию - C++
ѕомогите пожалуйста, никак не могу разобратьс€. я хочу чтобы функци€ createBlankGameField() ввела данные в массив gameField созданный в...

¬ыводит рандомные числа при передаче массива в функцию - C++
#include &lt;cstdlib&gt; //подключаем библиотесный модуль дл€ того чтобы заполнить массив рандомными числами #include &lt;iostream&gt; #include...

ќшибка при передаче в функцию указател€ на элемент массива - C++
#include &quot;stdafx.h&quot; #include &lt;iostream&gt; #include &lt;ctime&gt; #include &lt;cstdlib&gt; #include &lt;cmath&gt; const int n = 20; int...

Ќадоела реклама? «арегистрируйтесь и она исчезнет полностью.
aLarman
642 / 563 / 89
–егистраци€: 13.12.2012
—ообщений: 2,109
29.04.2014, 10:37 #2
C++
1
2
3
4
5
6
7
8
9
10
void create_Mas1 (long *L, long N)
{
 L=(long *)malloc(N*sizeof(long)); //бЃІ§ *®• ђ бᮥ  §Ђ®** ™Ѓ§ЃҐле бЂЃҐ
 if (L==NULL)
 {
  puts("О§*Ѓђ•а*л© ђ бᮥ *• бЃІ§ *!");
  getch();
  return;
 }
}
ћассив ¬ы так не создадите

ƒобавлено через 1 минуту
C++
1
2
3
4
5
6
7
8
9
10
void create_Mas1 (long *&L, long N)
{
 L=(long *)malloc(N*sizeof(long)); //бЃІ§ *®• ђ бᮥ  §Ђ®** ™Ѓ§ЃҐле бЂЃҐ
 if (L==NULL)
 {
  puts("О§*Ѓђ•а*л© ђ бᮥ *• бЃІ§ *!");
  getch();
  return;
 }
}
ƒобавлено через 1 минуту
÷итата —ообщение от ”ль€ниус ѕосмотреть сообщение
C++
1
2
3
4
float *Q
Lsh=0;
 int **C
long *L
инициализаци€ инициализаци€!!

ƒобавлено через 57 секунд
÷итата —ообщение от ”ль€ниус ѕосмотреть сообщение
void create_Mas2 (int **C,long N)
аналогично после выхода из ф-ции C не будет указывать на выделенную область пам€ти

ƒобавлено через 4 минуты
ошибка создани€ массива может повлечь необъ€снимое изменение данных, короч UB, так что переделывайте
”ль€ниус
1 / 1 / 0
–егистраци€: 15.08.2013
—ообщений: 132
29.04.2014, 14:36  [“—] #3
÷итата —ообщение от aLarman ѕосмотреть сообщение
C++
1
void create_Mas1 (long *&L, long N)
≈сли € ставлю *&L в функции, компил€тор ругаетс€: Expacted, причем он так ругаетс€ всегда, когда € пытаюсь так поставить. ƒаже когда в учебнике так написано, € не могу так написать в программе. ≈сли такое будет в описании функции, то как € должна вызвать функцию в самой программе? ≈сли пишу Mas1 (&L,N) ругаетс€:Suspicious pointer conversion.

ƒобавлено через 3 минуты
÷итата —ообщение от aLarman ѕосмотреть сообщение
C++
1
2
3
4
float *Q
Lsh=0;
*int **C
long *L
инициализаци€ инициализаци€!!
 ак инициализировать массив?
ƒл€ одномерного массива € использовала функцию memset(), но дл€ двумерного у мен€ не получилось ее использовать.
aLarman
642 / 563 / 89
–егистраци€: 13.12.2012
—ообщений: 2,109
29.04.2014, 14:48 #4
÷итата —ообщение от ”ль€ниус ѕосмотреть сообщение
 ак инициализировать массив?
а ¬ы тут видете массив? € нет, это всего лишь указатель, его в NULL
”ль€ниус
1 / 1 / 0
–егистраци€: 15.08.2013
—ообщений: 132
29.04.2014, 14:50  [“—] #5
пон€ла , а на счет того, что выше? ѕро отправку указател€ в функцию?
aLarman
642 / 563 / 89
–егистраци€: 13.12.2012
—ообщений: 2,109
29.04.2014, 15:00 #6
C++
1
2
3
4
5
6
7
8
9
10
11
12
void funck(int *&x)
{
    x = new int[10];
}
 
int main()
{
    int *a = NULL;
    funck(a);
    delete []a;
    system("pause");
}
вот така€ вещь работает 100%

ƒобавлено через 47 секунд
÷итата —ообщение от ”ль€ниус ѕосмотреть сообщение
ƒаже когда в учебнике так написано, € не могу так написать в программе.
видимо ¬ам все таки есть смысл сменить компил€тор, чего же MSVS не качаетс€ ?)
Denis123456789
43 / 43 / 17
–егистраци€: 02.06.2013
—ообщений: 180
29.04.2014, 15:07 #7
÷итата —ообщение от aLarman ѕосмотреть сообщение
C++
1
2
3
4
5
6
7
8
9
10
11
void funck(int *&x)
{
   x = new int[10];
}
int main()
{
   int *a = NULL;
   funck(a);
   delete []a;
   system("pause");
}
Ёто в с++ так выдел€етс€, а здесь и код вроде на с, и компил€тор, наверное, с только компилирует, а в нем malloc и free используетс€ дл€ выделени€ и освобождени€ динамической пам€ти
”ль€ниус
1 / 1 / 0
–егистраци€: 15.08.2013
—ообщений: 132
29.04.2014, 15:14  [“—] #8
я не могу примен€ть функции new() и delete(), компил€тор их не понимает. ј этот компил€тор был вместе с лекци€ми в нашем ¬”«е, т.е. € так понимаю, что мы наверное должны именно его использовать в работе .
MSVS скачала, но при компилировании, он стал ругать мой предыдущий код, € почитала, в нем нет одной стандартной библиотеки, не помню сейчас какой. ¬ итоге € тот предыдущий код дописала без дос бокса на старенькой XP и все заработало...—ама не понимаю, почему нас заставл€ют пользоватьс€ старыми технологи€ми .’от€ в инете читала что Ѕорланд —и++ может очень многое, что в других полностью нереализовано. ћне пока в этом очень трудно разобратьс€, так как надо все врем€ быстрее и быстрее писать и сдавать, на том что есть ... ¬от дл€ HTML нам сразу сказали, что надо пользоватьс€ такой то прогой, € скачала, было оч удобно писать, а тут вот так и вроде даже классы уже проходили, а надо писать без классов, так как классы это уже объектно-ориентированное программирование, а это другой предмет..Ќу или € что-то не понимаю....
Denis123456789
43 / 43 / 17
–егистраци€: 02.06.2013
—ообщений: 180
29.04.2014, 15:15 #9
÷итата —ообщение от aLarman ѕосмотреть сообщение
x = new int[10];
это в с++ так выдел€етс€, а здесь вроде код на с, и компил€тор с,наверное, только компилирует c, в с будет так вроде:
C
1
2
3
4
5
6
7
8
9
10
11
12
void funck(int *x)
{
    x = (int*) malloc(sizeof(int)*10);
}
 
int main()
{
    int *a = NULL;
    funck(a);
    free(a);
    system("pause");
}
Alex5
1052 / 715 / 105
–егистраци€: 12.04.2010
—ообщений: 1,810
29.04.2014, 15:17 #10
÷итата —ообщение от ”ль€ниус ѕосмотреть сообщение
ѕодскажите, пожалуйста, в чем может быть проблема?
”ль€ниус, что будет выведено на экран?
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
void f( int a )
{
    a = 456;
    printf( "\n  function f():  a == %d \n\n", a );
}
 
int main(void)
{
    int n = 123;
    f( n );
    printf( "\n  main():  n == %d \n\n", n );
    getchar();
    return 0;
}
”ль€ниус
1 / 1 / 0
–егистраци€: 15.08.2013
—ообщений: 132
29.04.2014, 15:22  [“—] #11
¬от предмет называетс€ —и++, компил€тор скачала —и++Builder, но у мен€ есть подозрение, что это все-таки не до конца —и++, так как многими функци€ми € не могу пользоватьс€, в то же врем€, это все-таки не —и, а что-то большее . ѕомогите!!!!

ƒобавлено через 5 минут
÷итата —ообщение от Alex5 ѕосмотреть сообщение
что будет выведено на экран?
456 два раза, а что?
Alex5
1052 / 715 / 105
–егистраци€: 12.04.2010
—ообщений: 1,810
29.04.2014, 15:41 #12
÷итата —ообщение от ”ль€ниус ѕосмотреть сообщение
—ообщение от Alex5
что будет выведено на экран?
456 два раза, а что?
¬ы уверены? Ёто пример, аналогичный ¬ашей проблеме. ( ак в функции изменить какие-то переменные, так чтобы эти изменени€ сохранились после выхода из функции.)

ƒобавлено через 6 минут
—м., что такое ѕередача параметра по значению
aLarman
642 / 563 / 89
–егистраци€: 13.12.2012
—ообщений: 2,109
29.04.2014, 15:49 #13
Alex5, спасибо
Denis123456789, оп€ть 25 на те же грабли

ƒобавлено через 2 минуты
C++
1
2
3
4
5
6
7
8
9
10
11
12
насчет с++, да € ошибс€ у ¬ас — юзаетс€ тогда 
 
void create_Mas1 (long **L, long N)
{
 *L=(long *)malloc(N*sizeof(long)); //бЃІ§ *®• ђ бᮥ  §Ђ®** ™Ѓ§ЃҐле бЂЃҐ
 if (*L==NULL)
 {
  puts("О§*Ѓђ•а*л© ђ бᮥ *• бЃІ§ *!");
  getch();
  return;
 }
}
использовать так
C++
1
2
3
4
long * x;
create_Mas1 (long &x, 50);
////
free(x);
ƒобавлено через 2 минуты
÷итата —ообщение от ”ль€ниус ѕосмотреть сообщение
’от€ в инете читала что Ѕорланд —и++ может очень многое, что в других полностью нереализовано.
это инфа оч устарела, такое может было примерно в прошлом тыс€чилетии
Denis123456789
43 / 43 / 17
–егистраци€: 02.06.2013
—ообщений: 180
29.04.2014, 16:15 #14
÷итата —ообщение от aLarman ѕосмотреть сообщение
Alex5
а по ссылке почему нельз€ передавать указатель?

ƒобавлено через 47 секунд
aLarman, а по ссылке почему указатель нельз€ передавать?

ƒобавлено через 4 минуты
C
1
2
3
4
5
6
7
8
9
10
11
12
void funck(int *&x)
{
    x = (int*) malloc(sizeof(int)*10);
}
 
int main()
{
    int *a = NULL;
    funck(a);
    free(a);
    system("pause");
}
¬от так почему нельз€? с ссылок не поддерживает что-ли?
ј так, выдел€ть пам€ть в функции как-то нехорошо по моему?
”ль€ниус
1 / 1 / 0
–егистраци€: 15.08.2013
—ообщений: 132
29.04.2014, 16:18  [“—] #15
÷итата —ообщение от aLarman ѕосмотреть сообщение
насчет с++, да € ошибс€ у ¬ас — юзаетс€ тогда
“.е. это все-таки си и надо в будущем в другом разделе форума создавать темки, да? »нтересно почему же тогда предмет си++ называетс€ ...Ќадо будет как выдастс€ свободна€ минутка, препода помучить по этому поводу.
MoreAnswers
Ёксперт
37091 / 29110 / 5898
–егистраци€: 17.06.2006
—ообщений: 43,301
29.04.2014, 16:18
ѕривет! ¬от еще темы с ответами:

ќшибка при передаче двумерного массива в функцию std::thread - C++
«дравствуйте! Ќаписал программу на потоки, теперь нужно передать туда двумерный массив. ѕытаюсь передать по ссылке, но каждый раз...

ѕри попытке вернуть одномерный массив чисел из функции, данные искажаютс€ - C++
ƒобрый вечер. ’очу чтобы функци€ возвращала мне одномерный массив содержащий в себе (int) числа. Ќо даже при такой конструкции: int *...

Ќаписать процедуру дл€ суммировани€ матриц. ќшибка при передаче массива в функцию - C++
ѕомогите пожалуйста! ƒано задание: Ќаписать процедуру дл€ суммировани€ матриц. — ее помощью сложить исходную матрицу и...

“рабл в передаче двумерного массива в функцию! - C++
--------------------- void input (int **a, int n, int m); void output (int **a, int n, int m); --------------------- int _tmain(int...


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

»ли воспользуйтесь поиском по форуму:
Yandex
ќбъ€влени€
29.04.2014, 16:18
ќтвет —оздать тему
ќпции темы

 ибер‘орум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
–ейтинг@Mail.ru