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

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

¬ойти
–егистраци€
¬осстановить пароль
 
 
”ль€ниус
1 / 1 / 0
–егистраци€: 15.08.2013
—ообщений: 132
#1

Ќе считает произведение разных типов данных - C++

15.04.2014, 08:31. ѕросмотров 689. ќтветов 25
ћетки нет (¬се метки)

Ќикак не могу разобратьс€, почему программа не хочет считать произведение.
¬от часть кода:
C++ (Qt)
1
2
3
4
for (i=0;i<N;i++) 
 {
  p[i]=1.0*ws[i]/N;
 }
где p[i]-динамический массив типа double
ws[i] массив типа long
N -переменна€ типа long.
я уже и так и этак переписывала этот код, и дополнительные переменные добавл€ла, но после i=2 p[i]=0.0 и хоть бейс€ головой об стенку . ’от€ массив ws{1,1,1,1,1,1,1,1,1,2,2,2}, N=12.

¬ целом рабочий код € приведу ниже, комментарии на русском, в компил€торе читаемы, а при переносе в блокнот и в ворд нечитаемы, поэтому прошу не ругатьс€, все комментарии переписывать, это с ума сойти, прошу лишь загрузить в компил€тор, чтобы проверить, что код реально рабочий, и то может и не понадобитс€ код вовсе, а знающим люд€м итак будет пон€тно в чем причина. ѕробовала воспользоватьс€ командами xxx_cast<type_to>, но в учебном компил€торе почему то отказываетс€ подключатьс€ библиотека iostream .
C++ (Qt)
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
#include <stdio.h>
#include <string.h>
#include <conio.h>
#include <math.h>
#include <stdlib.h>
 
#define n 69 //™ЃЂ®з•б⥁ б®ђҐЃЂЃҐ Ґ **£Ђ®©б™Ѓђ *Ђд*Ґ®в• °•І гз•в* а•£®бва* c 32 ѓЃ 127 ™Ѓ§ б®ђҐЃЂ*  в*°Ђ®жл 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 main()
{
 FILE  *f;
 char  key, ch,
    fname[50], //ђ*бᮥ §Ђп еа**•*®п ®ђ•*® д*©Ђ*
    CHAR[n],  //ђ*бᮥ Ґб•е б®ђҐЃЂЃҐ **£Ђ®©б™Ѓ£Ѓ *Ђд*Ґ®в*
    **C,//ђ*ва®ж* §Ђп еа**•*®п нЂ•ђ•*в*а*ле ™Ѓ§ЃҐ
    *CHAR_S; //ђ*бᮥ §Ђп еа**•*®п б®ђҐЃЂЃҐ Ґбва•з*ой®ебп Ґ д*©Ђ•
 long  i,j,m,N, //ѓ•а•ђ•**л• бз•вз®™®
    w[n], //з*бвЃвл ѓЃпҐЂ•*®п б®ђҐЃЂЃҐ Ґ в•™бв•
    *ws,//ЃвбЃав®аЃҐ***л© ђ*бᮥ з*бвЃв
    *L; //ђ*бᮥ §Ђ®** ™Ѓ§ЃҐле бЂЃҐ
 double *p,//ђ*бᮥ Ґ•аЃпв*Ѓбв•© ѓЃпҐЂ•*®п б®ђҐЃЂ* Ґ §***Ѓђ в•™бв•
    Hmax=0.0, //ђ*™б®ђ*Ђм**п н*ваЃѓ®п в•™бв*
    H=0.0,//н*ваЃѓ®п Ш•**Ѓ**
    s;//™Ѓ*ваЃЂм ѓа*Ґ®Ђм*Ѓбв® а*бз•в* ђ*бᮥ* Ґ•аЃпв*Ѓбв•©
 memset(CHAR,0 ,sizeof(CHAR));
 for(i=0;i<=32;i++)//І*ѓЃЂ*•*®• ђ*бᮥ* ™Ѓ§*ђ® б®ђҐЃЂЃҐ бЃ£Ђ*б*Ѓ в*°Ђ®ж• ASCII °•І гз•в* а•£®бва*
 {
  CHAR[i]=32+i;
 }
 for(i=33;i<n;i++)
 {
  CHAR[i]=58+i;
 }
 
 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);
  }
  while(!feof(f))
  {
   ch=getc(f);    //бз®влҐ**®• б®ђҐЃЂЃҐ
   if((ch>=65)&&(ch<=90)) //•бЂ® І*£Ђ*Ґ**п °г™Ґ* вЃ ®£*Ѓа®аг•ђ а•£®бва
    i=ch-26;
   else
   {
    for (j=0;j<n;j++)
     if (ch==CHAR[j])
     {
      i=j;
      break;
     }
   }
   w[i]+=1;
 }
 
 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;
 }
 j=0;
 for (i=n-N; i<n; i++)//™Ѓѓ®аЃҐ**®• б®ђҐЃЂЃҐ б з*бвЃвЃ© ѓЃпЂҐ•*®п >0 Ґ §®**ђ®з•б™®© ђ*бᮥ
 {
   ws[j]=w[i];
   CHAR_S[j]=CHAR[i];
   j++;
 }
 
 p=(double *)malloc(N*sizeof(double)) ;
 if (p==NULL)
 {
  puts("М*бᮥ p *• бЃІ§**!");
  getch();
  return;
 }
 
 for (i=0;i<N;i++) //а*ббз•в н*ваЃѓ®® д*©Ђ*
 {
  p[i]=1.0*ws[i]/N;//І*ѓЃЂ*•*®• ђ*бᮥ* Ґ•аЃпв*Ѓбв•© ѓЃпҐЂ•*®п б®ђҐЃЂЃҐ/
 }
 
 //ЃбҐЃ°Ѓ¶§•*®• ѓ*ђпв® Ѓв бЃІ§***ле §®**ђ®з•б™®е ђ*бᮥЃҐ
 for (i=0;i<N;i++)
 
 free(p);
 free(ws);
 
 getch();
 fclose(f);
 puts ("\n Ов™алвм §аг£Ѓ© д*©Ђ? (Н•в=Esc)");
 key=getch();
 }
 while (key!=27);//ESC
}
“екстовый файл приложен
¬ложени€
“ип файла: txt NEW.TXT (14 байт, 10 просмотров)
ѕосле регистрации реклама в сообщени€х будет скрыта и будут доступны все возможности форума.
”ль€ниус
1 / 1 / 0
–егистраци€: 15.08.2013
—ообщений: 132
29.04.2014, 22:01  [“—]     Ќе считает произведение разных типов данных #21
Ётот проект работает, а как вы мой код русифицировали так ловко?
alsav22
5415 / 4811 / 442
–егистраци€: 04.06.2011
—ообщений: 13,587
29.04.2014, 22:09     Ќе считает произведение разных типов данных #22
ƒл€ руссификации в Code Blocks (если с mingw), прописать, в настройках компил€тора (Compiler settings - Other options):
-finput-charset=CP1251 -fexec-charset=CP866. “огда в коде можно ничего дополнительно не писать.
DrOffset
29.04.2014, 22:17
  #23

Ќе по теме:

÷итата —ообщение от ”ль€ниус ѕосмотреть сообщение
Ётот проект работает, а как вы мой код русифицировали так ловко?
¬ смысле из кр€коз€бликов, получил нормальный текст?
Ќу так очень просто - видно же, что оригинальна€ кодировка не потер€на. –аз у вас DOS, значит это была CP866. ƒальше нужно только сохранить в файл и перекодировать

”ль€ниус
1 / 1 / 0
–егистраци€: 15.08.2013
—ообщений: 132
29.04.2014, 22:33  [“—]     Ќе считает произведение разных типов данных #24
÷итата —ообщение от DrOffset ѕосмотреть сообщение
Ќу так очень просто - видно же, что оригинальна€ кодировка не потер€на. –аз у вас DOS, значит это была CP866. ƒальше нужно только сохранить в файл и перекодировать
ј можно поподробнее ? ¬ какой файл сохранить и как перекодировать?
DrOffset
6851 / 4062 / 927
–егистраци€: 30.01.2014
—ообщений: 6,859
29.04.2014, 22:52     Ќе считает произведение разных типов данных #25
÷итата —ообщение от ”ль€ниус ѕосмотреть сообщение
¬ какой файл сохранить и как перекодировать?
¬ текстовый - filecp866.txt. ј потом так:
iconv -f cp866 -t cp1251 filecp866.txt -o filecp1251.txt
¬ Linux это сразу работает. ѕод Win должен быть установлен MSYS или Cygwin c iconv.
MoreAnswers
Ёксперт
37091 / 29110 / 5898
–егистраци€: 17.06.2006
—ообщений: 43,301
29.04.2014, 23:03     Ќе считает произведение разных типов данных
≈ще ссылки по теме:

C++ ќпределить наибольшее из 3 чисел дл€ данных разных типов
C++ ‘ункци€ swap перестановки значений двух переменных дл€ данных разных типов. »спользуйте template
C++ ѕростое создание строки из объектов разных типов данных
C++ ”казатели разных типов
C++ –еализовать сохранение в базу данных полей разных типов (в том числе и пользовательских)

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

»ли воспользуйтесь поиском по форуму:
”ль€ниус
1 / 1 / 0
–егистраци€: 15.08.2013
—ообщений: 132
29.04.2014, 23:03  [“—]     Ќе считает произведение разных типов данных #26
€ об€зательно с этим разберусь потом, когда по€витс€ больше времени, ща надо в коде плутать уже другом, что-то все как то медленно идет , или € медленна€, или самосто€тельно изучать все сложно...
Yandex
ќбъ€влени€
29.04.2014, 23:03     Ќе считает произведение разных типов данных
ќтвет —оздать тему
ќпции темы

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