‘орум программистов, компьютерный форум, киберфорум
Ќаши страницы

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

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

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

15.04.2014, 08:31. ѕросмотров 793. ќтветов 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
}
“екстовый файл приложен
0
¬ложени€
“ип файла: txt NEW.TXT (14 байт, 10 просмотров)
Ќадоела реклама? «арегистрируйтесь и она исчезнет полностью.
Similar
Ёксперт
41792 / 34177 / 6122
–егистраци€: 12.04.2006
—ообщений: 57,940
15.04.2014, 08:31
я подобрал дл€ вас темы с готовыми решени€ми и ответами на вопрос Ќе считает произведение разных типов данных (C++):

«асечь врем€ сортировки разных типов данных - C++
¬сем доброго времени суток, нужно в программе засечь врем€ выполнени€ сортировки разными способами, в моЄм случае это выборки и обмен,и дл€...

ѕростое создание строки из объектов разных типов данных - C++
¬сем доброго времени суток. —оздал класс, который (по моему мнению) сделает более удобным создание строк и их передачу в функции,...

ќпределить наибольшее из 3 чисел дл€ данных разных типов - C++
Ќапишите программу, котора€ позвол€ет определить наибольшее из 3 чисел дл€ данных разных типов. »спользуйте template (C++)

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

–еализовать сохранение в базу данных полей разных типов (в том числе и пользовательских) - C++
«дравствуйте! ѕодскажите как можно реализовать такую задачу: ¬ базе данных должны быть записи, которые состо€т из полей. ѕол€...

‘ункци€ swap перестановки значений двух переменных дл€ данных разных типов. »спользуйте template - C++
не могу решить ( честно говор€ вообще не понимаю его ) ((((( Ќапишите функцию swap перестановки значений двух переменных дл€ данных...

25
aLarman
644 / 565 / 89
–егистраци€: 13.12.2012
—ообщений: 2,111
«авершенные тесты: 1
15.04.2014, 08:42 #2
C++
1
2
3
4
for (i=0;i<N;i++) 
 {
  p[i]=1.0*(double)ws[i]/N;
 }
ƒобавлено через 10 секунд
если проблема реально в этом
0
”ль€ниус
1 / 1 / 0
–егистраци€: 15.08.2013
—ообщений: 132
15.04.2014, 08:46  [“—] #3
»справила, но все равно не считает после i=2
0
aLarman
644 / 565 / 89
–егистраци€: 13.12.2012
—ообщений: 2,111
«авершенные тесты: 1
15.04.2014, 09:27 #4
÷итата —ообщение от ”ль€ниус ѕосмотреть сообщение
’от€ массив ws{1,1,1,1,1,1,1,1,1,2,2,2}
¬ы уверены в этом?
÷итата —ообщение от ”ль€ниус ѕосмотреть сообщение
N=12.
и в этом тоже?, вывод делали?

а как провер€ли содержание массива p[] ?
0
”ль€ниус
1 / 1 / 0
–егистраци€: 15.08.2013
—ообщений: 132
15.04.2014, 09:46  [“—] #5
да уверена, смотрела под отладчиком все данные смотрела под отладчиком при i=4 счет расчет прекращаетс€ (в ws лишнюю 1 нарисовала - там считаетс€ программно).
0
aLarman
644 / 565 / 89
–егистраци€: 13.12.2012
—ообщений: 2,111
«авершенные тесты: 1
15.04.2014, 10:00 #6
перед этим кодом N = 12, создаем массив ws на 12 long и CHAR_S на 12 символов
C++
1
2
3
4
5
6
7
j=0;
 for (i=n-N; i<n; i++)//тут бежим по циклу, с i = 69 - 12 = 57 до i < 69 обращемс€ к ws и CHAR_S по индексу i - таких индексов нет - неопределенное поведение, дальше смотреть не стал
 {
   ws[j]=w[i];
   CHAR_S[j]=CHAR[i];
   j++;
 }
ƒобавлено через 2 минуты
C++
1
2
3
4
for (i=0;i<N;i++)
 
 free(p);
 free(ws);
надеюсь то ¬ы тут удалил какую то строчку, иначе получаетс€ инструкци€ free(p) буде выполн€тьс€ в цикле - снова падение
0
”ль€ниус
1 / 1 / 0
–егистраци€: 15.08.2013
—ообщений: 132
15.04.2014, 10:16  [“—] #7
÷итата —ообщение от aLarman ѕосмотреть сообщение
перед этим кодом N = 12, создаем массив ws на 12 long и CHAR_S на 12 символов
 од C++
j=0;
*for (i=n-N; i<n; i++)//тут бежим по циклу, с i = 69 - 12 = 57 до i < 69 обращемс€ к ws и CHAR_S по индексу i - таких индексов нет - неопределенное поведение, дальше смотреть не стал
*{
* *ws[j]=w[i];
* *CHAR_S[j]=CHAR[i];
* *j++;
*}
«десь все правильно, копирую 12 последних символов. я обращаюсь к ws[j] и CHAR_S[j], а в конце цикла увеличиваю j++

ƒобавлено через 1 минуту
÷итата —ообщение от aLarman ѕосмотреть сообщение
 од C++

for (i=0;i<N;i++)
free(p);
*free(ws);
надеюсь то ¬ы тут удалил какую то строчку, иначе получаетс€ инструкци€ free(p) буде выполн€тьс€ в цикле - снова падение
ƒа, вы правы, строка
C++ (Qt)
1
for (i=0;i<N;i++)
должна быть удалена, но это не вли€ет на расчет p[i].
0
aLarman
644 / 565 / 89
–егистраци€: 13.12.2012
—ообщений: 2,111
«авершенные тесты: 1
15.04.2014, 10:19 #8
C++
1
2
3
4
5
6
7
8
for (i=0;i<N;i++) //а*ббз•в н*ваЃѓ®® д*©Ђ*
        {
            p[i]=1.0*ws[i]/N;//І*ѓЃЂ*•*®• ђ*бᮥ* Ґ•аЃпв*Ѓбв•© ѓЃпҐЂ•*®п б®ђҐЃЂЃҐ/
        }
        for (i=0;i<N;i++) //а*ббз•в н*ваЃѓ®® д*©Ђ*
        {
            cout<<p[i]<<endl;//І*ѓЃЂ*•*®• ђ*бᮥ* Ґ•аЃпв*Ѓбв•© ѓЃпҐЂ•*®п б®ђҐЃЂЃҐ/
        }
у мен€ почему все работает...
0
ћиниатюры
Ќе считает произведение разных типов данных  
aLarman
644 / 565 / 89
–егистраци€: 13.12.2012
—ообщений: 2,111
«авершенные тесты: 1
15.04.2014, 10:22 #9
÷итата —ообщение от ”ль€ниус ѕосмотреть сообщение
смотрела под отладчиком все данные смотрела под отладчиком
может стоит сделать ¬ывод массива p

ƒобавлено через 1 минуту
÷итата —ообщение от ”ль€ниус ѕосмотреть сообщение
«десь все правильно, копирую 12 последних символов. я обращаюсь к ws[j] и CHAR_S[j], а в конце цикла увеличиваю j++
да мой кос€к, что то € перестаралс€
0
”ль€ниус
1 / 1 / 0
–егистраци€: 15.08.2013
—ообщений: 132
15.04.2014, 10:39  [“—] #10
ћожет у мен€ компил€тор кривой . ѕотому что потом € считаю энтропию файла и на самом деле p[i] равно нулю и ругаетс€ что не может посчитать логарифм нул€ . я использую —и++Builder. ѕод отладчиком смотрю двенадцать раз, потому как не выводит динамический массив как статический одной строкой

ƒобавлено через 2 минуты
÷итата —ообщение от aLarman ѕосмотреть сообщение
да мой кос€к, что то € перестаралс€
спасибо что пытаетесь помочь

ƒобавлено через 13 минут
÷итата —ообщение от ”ль€ниус ѕосмотреть сообщение
я использую —и++Builder.
„то попало написала, использую C++ Borland запущенный из DOSBox
0
DrOffset
7517 / 4513 / 1024
–егистраци€: 30.01.2014
—ообщений: 7,362
15.04.2014, 10:53 #11
÷итата —ообщение от ”ль€ниус ѕосмотреть сообщение
использую C++ Borland запущенный из DOSBox

Ќе по теме:

ѕозвольте один совет. ≈сли есть хоть малейша€ возможность сменить компил€тор при написаннии заданий - сделайте это.
ƒл€ большей пон€тности почему: вот пришли вы сдавать на права, а вам вместо автомобил€ предлагают управл€ть конной повозкой. ћожет быть где-то это и пригодитс€, но ездить на атомобиле вы точно не научитесь. ƒл€ справки: компил€тор этот 1992 года выпуска, первый международный стандарт —++ вышел только в 1998. ѕервый нормальный компил€тор, который его поддерживал, по€вилс€ только в начале 2000х.

0
”ль€ниус
1 / 1 / 0
–егистраци€: 15.08.2013
—ообщений: 132
15.04.2014, 10:56  [“—] #12
÷итата —ообщение от DrOffset ѕосмотреть сообщение
ѕозвольте один совет.
посоветуйте программу, если можно бесплатную...
0
DrOffset
7517 / 4513 / 1024
–егистраци€: 30.01.2014
—ообщений: 7,362
15.04.2014, 11:01 #13
÷итата —ообщение от ”ль€ниус ѕосмотреть сообщение
посоветуйте программу, если можно бесплатную...
Ќапример, CodeBlocks качать mingw-setup.
0
aLarman
15.04.2014, 11:49
  #14

Ќе по теме:

вижа - Microsoft Visual Studio

ƒобавлено через 20 секунд
gсс

0
”ль€ниус
1 / 1 / 0
–егистраци€: 15.08.2013
—ообщений: 132
29.04.2014, 10:14  [“—] #15
„то-то у мен€ там не скомпилировалось, не нашел какую то стандартную библиотеку. ѕришлось Ѕилдер —и++ запустить под ’– без эмул€тора и все пошло . ј ща столкнулась с проблемой, что ƒќ—бокс под мою 8.1 не хочет идти, система умирает ((.
0
29.04.2014, 10:14
MoreAnswers
Ёксперт
37091 / 29110 / 5898
–егистраци€: 17.06.2006
—ообщений: 43,301
29.04.2014, 10:14
ѕривет! ¬от еще темы с ответами:

криво считает произведение - C++
всЄ, кроме произведени€, работает правильно #include &lt;stdio.h&gt; #include &lt;stdlib.h&gt; #include &lt;conio.h&gt; #define n 10 int main ()...

’ранение разных типов - C++
ѕриветствую всех. ¬озник вот такой вопрос. ” мен€ есть, например, 3 разных структуры, кажда€ из которых имеет разные пол€: struct one ...

—ложение разных типов - C++
” мен€ из файла в переменную int считыветс€ число.. ћне нужно занести в переменную string это число + строка. Ќапример int...

”казатели разных типов - C++
ƒобрый день уважаемые форумчане !!! ’очу уточнить дл€ себ€ следующую деталь. ≈сть базовый класс Fada и производные от него Tasa ...


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

»ли воспользуйтесь поиском по форуму:
15
ќтвет —оздать тему
ќпции темы

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