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

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

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

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

15.04.2014, 08:31. ѕросмотров 751. ќтветов 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
DrOffset
7376 / 4453 / 1009
–егистраци€: 30.01.2014
—ообщений: 7,304
29.04.2014, 18:04 #16
÷итата —ообщение от ”ль€ниус ѕосмотреть сообщение
„то-то у мен€ там не скомпилировалось
Ќельз€ так быстро отступать
¬сего-то нужно было немного к стандартному виду привести. ќшибки не исправл€л (они там есть), только код сделал компилируемым.
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
#include <stdio.h>
#include <string.h>
#include <conio.h>
#include <math.h>
#include <stdlib.h>
#include <locale.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();
    }
}
 
int 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;//контроль правильности расчета массива веро€тностей
 
    setlocale(LC_ALL, "Russian");
 
    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
    {
        system("cls");//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 1;
        }
 
        CHAR_S=(char *)malloc(N*sizeof(char));
        if (CHAR_S==NULL)
        {
            puts("ћассив CHAR_S не создан!");
            getch();
            return 1;
        }
        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 1;
        }
 
        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
”ль€ниус
1 / 1 / 0
–егистраци€: 15.08.2013
—ообщений: 132
29.04.2014, 20:21  [“—] #17
ѕолучилось все, (спасибо, многое узнала) кроме русского €зыка, функци€
÷итата —ообщение от DrOffset ѕосмотреть сообщение
setlocale(LC_ALL, "Russian");
не помогла , везде кракоз€бры почему то...
0
DrOffset
7376 / 4453 / 1009
–егистраци€: 30.01.2014
—ообщений: 7,304
29.04.2014, 20:25 #18
÷итата —ообщение от ”ль€ниус ѕосмотреть сообщение
не помогла
Ўрифт в консольке надо помен€ть.
0
”ль€ниус
1 / 1 / 0
–егистраци€: 15.08.2013
—ообщений: 132
29.04.2014, 20:36  [“—] #19
÷итата —ообщение от DrOffset ѕосмотреть сообщение
Ўрифт в консольке надо помен€ть.
нашла что надо сделать так:
¬ настройках Code Blocks: Settings - Editor, поставьте Windows-1251
но у мен€ так и было ...у мен€ вин 8.1, какой шрифт надо выбрать?

ƒобавлено через 3 минуты
и даже выбор Lucida consol не помог
0
DrOffset
7376 / 4453 / 1009
–егистраци€: 30.01.2014
—ообщений: 7,304
29.04.2014, 21:00 #20
÷итата —ообщение от ”ль€ниус ѕосмотреть сообщение
Lucida consol не помог
¬от проект. ƒолжно работать с Lucida Console.
0
¬ложени€
“ип файла: rar encoding.rar (130.8  б, 4 просмотров)
”ль€ниус
1 / 1 / 0
–егистраци€: 15.08.2013
—ообщений: 132
29.04.2014, 22:01  [“—] #21
Ётот проект работает, а как вы мой код русифицировали так ловко?
0
alsav22
5426 / 4821 / 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. “огда в коде можно ничего дополнительно не писать.
0
DrOffset
29.04.2014, 22:17
  #23

Ќе по теме:

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

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

криво считает произведение - 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 ...


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

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

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