Согласен с последним постом STL намного лучше, проверено опытом
» Вопросы по программированию на C/С++
Изучаю C
хочу понять почему
при делении 1/10
вместо 0.10000000000000000000
получаю 0.10000000149011611938
(при выводе двадцати знаков)
Код: #include <stdio.h>
int main(void)
{
float answer = 1.0 / 10.0;
printf("%.20f\n", answer);
return 0;
}
хочу понять почему
при делении 1/10
вместо 0.10000000000000000000
получаю 0.10000000149011611938
(при выводе двадцати знаков)
Код: #include <stdio.h>
int main(void)
{
float answer = 1.0 / 10.0;
printf("%.20f\n", answer);
return 0;
}
NORIO
Цитата:
Имхо, полученный результат ближе к истине, чем твои предположения.
Цитата:
Изучаю C
хочу понять почему
при делении 1/10
вместо 0.00000000000000000000
получаю 0.10000000149011611938
Имхо, полученный результат ближе к истине, чем твои предположения.
V0lt
Скопировал неглядя не то.
Поправил.
Попробовал в онлайн компиляторе, http://codepad.org/j2wROdxr здесь всё выдаёт логично.
А вот в видео курсе edx показывается такой странный результат.
Поэтому дополню вопрос почему такое иногда может быть, теоретически.
Очень интересна причина такого поведения.
Там что то говорили про отображение бесконечного числа в восми битах, но по английски, так что я смутно понял. Хотелось бы по продробнее.
Ах да.
float answer = 1.0 / 10.0;
а не
float answer = 1 / 10;
Скопировал неглядя не то.
Поправил.
Попробовал в онлайн компиляторе, http://codepad.org/j2wROdxr здесь всё выдаёт логично.
А вот в видео курсе edx показывается такой странный результат.
Поэтому дополню вопрос почему такое иногда может быть, теоретически.
Очень интересна причина такого поведения.
Там что то говорили про отображение бесконечного числа в восми битах, но по английски, так что я смутно понял. Хотелось бы по продробнее.
Ах да.
float answer = 1.0 / 10.0;
а не
float answer = 1 / 10;
NORIO
Ну, если в общих чертах...
Числа с плавающей точкой представляются в экспотенциальном виде - мантисса (нормированное число) и экспонента (показатель степени).
Для простоты понимания можно для начала рассмотреть это дело в десятичной системе счисления. Если у нас есть число 12.34, скажем, то в экспотенциальном виде оно запишется как 1.234*101. Здесь 1.234 - это мантисса, а 1 - экспонента. Если у нас под мантиссу отведено только четыре позиции для значащих цифр, к примеру, понятно, что 1.2347 записать уже не получиться - оно будет округлено до 1.235. И результат получится не совсем тот, который вроде как ожидается с точки зрения чистой математики.
Вот именно это в вышеописанной программе и происходит. С той лишь разницей, что машина всё хранит и обрабатывает в двоичном виде, так что число представляется не как aaa*10bb, а как ссс*2dd. При выдаче результата число переводится из двоичной системы в десятичную, что и даёт впечатление мусора. На самом деле, конечно, никакой это не мусор, а обычная двоичная дробь. Ошибка округления, переведённая в десятичную систему счисления.
Ну, если в общих чертах...
Числа с плавающей точкой представляются в экспотенциальном виде - мантисса (нормированное число) и экспонента (показатель степени).
Для простоты понимания можно для начала рассмотреть это дело в десятичной системе счисления. Если у нас есть число 12.34, скажем, то в экспотенциальном виде оно запишется как 1.234*101. Здесь 1.234 - это мантисса, а 1 - экспонента. Если у нас под мантиссу отведено только четыре позиции для значащих цифр, к примеру, понятно, что 1.2347 записать уже не получиться - оно будет округлено до 1.235. И результат получится не совсем тот, который вроде как ожидается с точки зрения чистой математики.
Вот именно это в вышеописанной программе и происходит. С той лишь разницей, что машина всё хранит и обрабатывает в двоичном виде, так что число представляется не как aaa*10bb, а как ссс*2dd. При выдаче результата число переводится из двоичной системы в десятичную, что и даёт впечатление мусора. На самом деле, конечно, никакой это не мусор, а обычная двоичная дробь. Ошибка округления, переведённая в десятичную систему счисления.
Abs62
Ага, теперь понятна причина. Спасибо.
Ага, теперь понятна причина. Спасибо.
Kars25rus
Ээ, для вашего примера ожидаемый результат - 0.0(0), а не 0.1(0). Может на видео код был немного другой?
P. S.
Kars25rus
Прошу прощения, ошибся.
NORIO
Угу.
Ээ, для вашего примера ожидаемый результат - 0.0(0), а не 0.1(0). Может на видео код был немного другой?
P. S.
Kars25rus
Прошу прощения, ошибся.
NORIO
Угу.
[more] помогите найти ошибку в коде.
два класса страна и континент. класс-обработчик должен сортировать страны выбранного континента по населению и площади.
не работают функции Create_Country Delete_Country
#include<math.h>
#include<stdio.h>
#include<stdlib.h>
#include<conio.h>
#include<time.h>
#include<dos.h>
#include<string.h>
#include <iostream>
# define one 49
# define two 50
# define three 51
# define four 52
#define Col_Count 5
#define Col_Cont 3
//using namespace std;
int n=Col_Count;
int m=Col_Cont;
class Country
{
private:
char *Name_Country;
float Naselenije;
float Ploshad;
char *Forma_Pravl;
public:
Country();
~Country();
char *GetName_Country();
float GetNaselenije();
float GetPloshad();
char *GetForma_Pravl();
void SetName_Country(char *newVal);
void SetNaselenije(float newVal);
void SetPloshad(float newVal);
void SetForma_Pravl(char *newVal);
void Print();
};
Country::Country()
{
// printf("Country Constructor without params used\n");
Name_Country=new char[200];
Forma_Pravl=new char[200];
strcpy(Name_Country,"");
Naselenije = 0;
Ploshad = 0;
strcpy(Forma_Pravl,"");
}
Country::~Country()
{
// printf("Country Destructor used\n");
if(Name_Country != NULL)
// strcpy(Name_Country,"");
delete[]Name_Country;
if(Forma_Pravl != NULL)
// strcpy(Forma_Pravl,"");
delete []Forma_Pravl;
}
void Country::Print()
{
printf("%s | %10.2f | %9.2f | %s\n",Name_Country,Naselenije,Ploshad,Forma_Pravl);
}
char*Country::GetName_Country()
{ return this->Name_Country ; }
float Country::GetNaselenije()
{ return this->Naselenije; }
float Country::GetPloshad()
{ return this->Ploshad; }
char* Country::GetForma_Pravl()
{ return this->Forma_Pravl; }
void Country::SetName_Country(char *newVal)
{ strcpy(this->Name_Country,newVal); }
void Country::SetNaselenije(float newVal)
{ this->Naselenije = newVal; }
void Country::SetPloshad(float newVal)
{ this->Ploshad = newVal; }
void Country::SetForma_Pravl(char *newVal)
{ strcpy(this->Forma_Pravl,newVal); }
//_______________________________________________________________________
class Continent
{
private:
char *Name_Continent;
Country ListCountries[10];
public:
Country *m_Country;
Continent();
~Continent();
char *GetName_Continent ();
void SetName_Continent (char *newVal);
Country GetListCountries (int i);
void SetListCountries (char *Name_Country,float Naselenije, char *Forma_Pravl, float Ploshad,int i);
void Create_Country(char* Name, float Plosh, float Nas, char *Form);
void Delete_Country(char *Name_Country);
void Print_Cont();
};
void Continent::Print_Cont()
{
printf("___________________________________________________________\n");
printf("%35s\n",Name_Continent);
printf("___________________________________________________________\n");
printf(" Name_Country | Naselenije | Ploshad | Form_Pravlenija\n");
printf("___________________________________________________________\n");
for(int i=0;i<n;i++)
{
ListCountries[i].Print();
}
}
Continent::Continent()
{
// printf("\n \n Continent Constructor without params used\n\n");
Name_Continent=new char[256];
strcpy(this->Name_Continent,"");
}
Continent::~Continent()
{
//printf("\nContinent Destructor used\n\n");
if(this->Name_Continent != NULL)
//strcpy(this->Name_Continent,"");
delete []Name_Continent;
}
char *Continent::GetName_Continent ()
{ return this->Name_Continent; }
void Continent::SetName_Continent (char *newVal)
{ strcpy(Name_Continent,newVal); }
Country Continent::GetListCountries (int i)
{ return ListCountries[i]; }
void Continent::SetListCountries (char *Name_Country,float Naselenije, char* Forma_Pravl, float Ploshad,int i)
{
ListCountries[i].SetName_Country(Name_Country);
ListCountries[i].SetNaselenije(Naselenije);
ListCountries[i].SetPloshad(Ploshad);
ListCountries[i].SetForma_Pravl(Forma_Pravl);
}
void Continent::Create_Country(char *Name, float Plosh, float Nas, char *Form)
{
ListCountries[n].SetName_Country(Name);
ListCountries[n].SetPloshad(Plosh);
ListCountries[n].SetNaselenije(Nas);
ListCountries[n].SetForma_Pravl(Form);
n+=1;
}
void Continent::Delete_Country(char *Name_Country)
{
int k,k1;
for(k=0;k<n;k++)
{
if(strcmp(ListCountries[k].GetName_Country(), Name_Country)==0)
{
for(k1=k+1;k<n;k++,k1++)
{
if(k1<n){
ListCountries[k].SetName_Country(ListCountries[k1].GetName_Country());
ListCountries[k].SetNaselenije(ListCountries[k1].GetNaselenije());
ListCountries[k].SetPloshad(ListCountries[k1].GetPloshad());
ListCountries[k].SetForma_Pravl(ListCountries[k1].GetForma_Pravl());
}
else {break;}
}
n-=1;
}
}
Print_Cont();
}
//_______________________________________________________________________
class Obrabotchik
{
private:
Continent List_Continents[Col_Cont];
public:
Obrabotchik();
~Obrabotchik();
Continent GetListContinents (int i);
void CreateListContinents();
void Sort_po_plosh(int i);
void Sort_po_nasel(int i);
};
Obrabotchik::Obrabotchik()
{
// printf("\n \n Obr Constructor without params used\n\n");
}
Obrabotchik::~Obrabotchik()
{
//printf("\nObr Destructor used\n\n");
}
Continent Obrabotchik::GetListContinents (int i)
{ return List_Continents[i]; }
void Obrabotchik::CreateListContinents()
{
int i,j;
char c[20]={"Name_Continent_"},name[15]={"Name_Country_"},form[15]={"Form_Country_"},str[30],str1[30];
float x1,x2;
for( i=0;i<Col_Cont;i++)
{
sprintf(str, "%s %d",c, i+1);
List_Continents[i].SetName_Continent(str);
for(j=0;j<Col_Count;j++)
{
sprintf(str, "%s %d",name, j+1);
sprintf(str1, "%s %d",form, j+1);
x1=(float)200+rand()/300;
x2=(float)200+rand()/300;
List_Continents[i].SetListCountries(str,x1,str1,x2,j);
}
List_Continents[i].Print_Cont();
}
}
void Obrabotchik::Sort_po_plosh(int k)
{
int i,j,imin=0;
float min_el=99000;
Country temp;
for(i=0;i<Col_Count;i++)
{
imin=i;
min_el=List_Continents[k].GetListCountries(i).GetPloshad();
for(j=i+1;j<Col_Count;j++)
{
if(List_Continents[k].GetListCountries(j).GetPloshad()<min_el){
imin=j;
min_el=List_Continents[k].GetListCountries(j).GetPloshad();
}
}
temp.SetName_Country(List_Continents[k].GetListCountries(i).GetName_Country());
temp.SetForma_Pravl(List_Continents[k].GetListCountries(i).GetForma_Pravl());
temp.SetNaselenije(List_Continents[k].GetListCountries(i).GetNaselenije());
temp.SetPloshad(List_Continents[k].GetListCountries(i).GetPloshad());
List_Continents[k].SetListCountries(List_Continents[k].GetListCountries(imin).GetName_Country(),List_Continents[k].GetListCountries(imin).GetNaselenije(),List_Continents[k].GetListCountries(imin).GetForma_Pravl(),List_Continents[k].GetListCountries(imin).GetPloshad(),i);
List_Continents[k].SetListCountries(temp.GetName_Country(),temp.GetNaselenije(),temp.GetForma_Pravl(),temp.GetPloshad(),imin);
}
}
void Obrabotchik::Sort_po_nasel(int k)
{
int i,j,imin=0;
float min_el=99000;
Country temp;
for(i=0;i<Col_Count-1;i++)
{
imin=i;
min_el=List_Continents[k].GetListCountries(i).GetNaselenije();
for(j=i+1;j<Col_Count;j++)
{
if(List_Continents[k].GetListCountries(j).GetNaselenije()<min_el){
imin=j;
min_el=List_Continents[k].GetListCountries(j).GetNaselenije();
}
}
temp.SetName_Country(List_Continents[k].GetListCountries(i).GetName_Country());
temp.SetForma_Pravl(List_Continents[k].GetListCountries(i).GetForma_Pravl());
temp.SetNaselenije(List_Continents[k].GetListCountries(i).GetNaselenije());
temp.SetPloshad(List_Continents[k].GetListCountries(i).GetPloshad());
List_Continents[k].SetListCountries(List_Continents[k].GetListCountries(imin).GetName_Country(),List_Continents[k].GetListCountries(imin).GetNaselenije(),List_Continents[k].GetListCountries(imin).GetForma_Pravl(),List_Continents[k].GetListCountries(imin).GetPloshad(),i);
List_Continents[k].SetListCountries(temp.GetName_Country(),temp.GetNaselenije(),temp.GetForma_Pravl(),temp.GetPloshad(),imin);
}
}
int main()
{
{
int i;
char *a,*f;
float s=12,p=32;
a=new char [200];
f=new char [200];
strcpy(a,"Name_Country_ 1");
strcpy(f,"Form");
Obrabotchik A;
A.CreateListContinents();
/*
for(i=0;i<n;i++)
A.GetListContinents(i).Print_Cont();
*/
A.GetListContinents(0).Delete_Country(a);
//A.GetListContinents(0).Create_Country(a,s,p,f);
for(i=0;i<m;i++)
A.GetListContinents(i).Print_Cont();
}
system("pause");
return 0;
}
[/more]
два класса страна и континент. класс-обработчик должен сортировать страны выбранного континента по населению и площади.
не работают функции Create_Country Delete_Country
#include<math.h>
#include<stdio.h>
#include<stdlib.h>
#include<conio.h>
#include<time.h>
#include<dos.h>
#include<string.h>
#include <iostream>
# define one 49
# define two 50
# define three 51
# define four 52
#define Col_Count 5
#define Col_Cont 3
//using namespace std;
int n=Col_Count;
int m=Col_Cont;
class Country
{
private:
char *Name_Country;
float Naselenije;
float Ploshad;
char *Forma_Pravl;
public:
Country();
~Country();
char *GetName_Country();
float GetNaselenije();
float GetPloshad();
char *GetForma_Pravl();
void SetName_Country(char *newVal);
void SetNaselenije(float newVal);
void SetPloshad(float newVal);
void SetForma_Pravl(char *newVal);
void Print();
};
Country::Country()
{
// printf("Country Constructor without params used\n");
Name_Country=new char[200];
Forma_Pravl=new char[200];
strcpy(Name_Country,"");
Naselenije = 0;
Ploshad = 0;
strcpy(Forma_Pravl,"");
}
Country::~Country()
{
// printf("Country Destructor used\n");
if(Name_Country != NULL)
// strcpy(Name_Country,"");
delete[]Name_Country;
if(Forma_Pravl != NULL)
// strcpy(Forma_Pravl,"");
delete []Forma_Pravl;
}
void Country::Print()
{
printf("%s | %10.2f | %9.2f | %s\n",Name_Country,Naselenije,Ploshad,Forma_Pravl);
}
char*Country::GetName_Country()
{ return this->Name_Country ; }
float Country::GetNaselenije()
{ return this->Naselenije; }
float Country::GetPloshad()
{ return this->Ploshad; }
char* Country::GetForma_Pravl()
{ return this->Forma_Pravl; }
void Country::SetName_Country(char *newVal)
{ strcpy(this->Name_Country,newVal); }
void Country::SetNaselenije(float newVal)
{ this->Naselenije = newVal; }
void Country::SetPloshad(float newVal)
{ this->Ploshad = newVal; }
void Country::SetForma_Pravl(char *newVal)
{ strcpy(this->Forma_Pravl,newVal); }
//_______________________________________________________________________
class Continent
{
private:
char *Name_Continent;
Country ListCountries[10];
public:
Country *m_Country;
Continent();
~Continent();
char *GetName_Continent ();
void SetName_Continent (char *newVal);
Country GetListCountries (int i);
void SetListCountries (char *Name_Country,float Naselenije, char *Forma_Pravl, float Ploshad,int i);
void Create_Country(char* Name, float Plosh, float Nas, char *Form);
void Delete_Country(char *Name_Country);
void Print_Cont();
};
void Continent::Print_Cont()
{
printf("___________________________________________________________\n");
printf("%35s\n",Name_Continent);
printf("___________________________________________________________\n");
printf(" Name_Country | Naselenije | Ploshad | Form_Pravlenija\n");
printf("___________________________________________________________\n");
for(int i=0;i<n;i++)
{
ListCountries[i].Print();
}
}
Continent::Continent()
{
// printf("\n \n Continent Constructor without params used\n\n");
Name_Continent=new char[256];
strcpy(this->Name_Continent,"");
}
Continent::~Continent()
{
//printf("\nContinent Destructor used\n\n");
if(this->Name_Continent != NULL)
//strcpy(this->Name_Continent,"");
delete []Name_Continent;
}
char *Continent::GetName_Continent ()
{ return this->Name_Continent; }
void Continent::SetName_Continent (char *newVal)
{ strcpy(Name_Continent,newVal); }
Country Continent::GetListCountries (int i)
{ return ListCountries[i]; }
void Continent::SetListCountries (char *Name_Country,float Naselenije, char* Forma_Pravl, float Ploshad,int i)
{
ListCountries[i].SetName_Country(Name_Country);
ListCountries[i].SetNaselenije(Naselenije);
ListCountries[i].SetPloshad(Ploshad);
ListCountries[i].SetForma_Pravl(Forma_Pravl);
}
void Continent::Create_Country(char *Name, float Plosh, float Nas, char *Form)
{
ListCountries[n].SetName_Country(Name);
ListCountries[n].SetPloshad(Plosh);
ListCountries[n].SetNaselenije(Nas);
ListCountries[n].SetForma_Pravl(Form);
n+=1;
}
void Continent::Delete_Country(char *Name_Country)
{
int k,k1;
for(k=0;k<n;k++)
{
if(strcmp(ListCountries[k].GetName_Country(), Name_Country)==0)
{
for(k1=k+1;k<n;k++,k1++)
{
if(k1<n){
ListCountries[k].SetName_Country(ListCountries[k1].GetName_Country());
ListCountries[k].SetNaselenije(ListCountries[k1].GetNaselenije());
ListCountries[k].SetPloshad(ListCountries[k1].GetPloshad());
ListCountries[k].SetForma_Pravl(ListCountries[k1].GetForma_Pravl());
}
else {break;}
}
n-=1;
}
}
Print_Cont();
}
//_______________________________________________________________________
class Obrabotchik
{
private:
Continent List_Continents[Col_Cont];
public:
Obrabotchik();
~Obrabotchik();
Continent GetListContinents (int i);
void CreateListContinents();
void Sort_po_plosh(int i);
void Sort_po_nasel(int i);
};
Obrabotchik::Obrabotchik()
{
// printf("\n \n Obr Constructor without params used\n\n");
}
Obrabotchik::~Obrabotchik()
{
//printf("\nObr Destructor used\n\n");
}
Continent Obrabotchik::GetListContinents (int i)
{ return List_Continents[i]; }
void Obrabotchik::CreateListContinents()
{
int i,j;
char c[20]={"Name_Continent_"},name[15]={"Name_Country_"},form[15]={"Form_Country_"},str[30],str1[30];
float x1,x2;
for( i=0;i<Col_Cont;i++)
{
sprintf(str, "%s %d",c, i+1);
List_Continents[i].SetName_Continent(str);
for(j=0;j<Col_Count;j++)
{
sprintf(str, "%s %d",name, j+1);
sprintf(str1, "%s %d",form, j+1);
x1=(float)200+rand()/300;
x2=(float)200+rand()/300;
List_Continents[i].SetListCountries(str,x1,str1,x2,j);
}
List_Continents[i].Print_Cont();
}
}
void Obrabotchik::Sort_po_plosh(int k)
{
int i,j,imin=0;
float min_el=99000;
Country temp;
for(i=0;i<Col_Count;i++)
{
imin=i;
min_el=List_Continents[k].GetListCountries(i).GetPloshad();
for(j=i+1;j<Col_Count;j++)
{
if(List_Continents[k].GetListCountries(j).GetPloshad()<min_el){
imin=j;
min_el=List_Continents[k].GetListCountries(j).GetPloshad();
}
}
temp.SetName_Country(List_Continents[k].GetListCountries(i).GetName_Country());
temp.SetForma_Pravl(List_Continents[k].GetListCountries(i).GetForma_Pravl());
temp.SetNaselenije(List_Continents[k].GetListCountries(i).GetNaselenije());
temp.SetPloshad(List_Continents[k].GetListCountries(i).GetPloshad());
List_Continents[k].SetListCountries(List_Continents[k].GetListCountries(imin).GetName_Country(),List_Continents[k].GetListCountries(imin).GetNaselenije(),List_Continents[k].GetListCountries(imin).GetForma_Pravl(),List_Continents[k].GetListCountries(imin).GetPloshad(),i);
List_Continents[k].SetListCountries(temp.GetName_Country(),temp.GetNaselenije(),temp.GetForma_Pravl(),temp.GetPloshad(),imin);
}
}
void Obrabotchik::Sort_po_nasel(int k)
{
int i,j,imin=0;
float min_el=99000;
Country temp;
for(i=0;i<Col_Count-1;i++)
{
imin=i;
min_el=List_Continents[k].GetListCountries(i).GetNaselenije();
for(j=i+1;j<Col_Count;j++)
{
if(List_Continents[k].GetListCountries(j).GetNaselenije()<min_el){
imin=j;
min_el=List_Continents[k].GetListCountries(j).GetNaselenije();
}
}
temp.SetName_Country(List_Continents[k].GetListCountries(i).GetName_Country());
temp.SetForma_Pravl(List_Continents[k].GetListCountries(i).GetForma_Pravl());
temp.SetNaselenije(List_Continents[k].GetListCountries(i).GetNaselenije());
temp.SetPloshad(List_Continents[k].GetListCountries(i).GetPloshad());
List_Continents[k].SetListCountries(List_Continents[k].GetListCountries(imin).GetName_Country(),List_Continents[k].GetListCountries(imin).GetNaselenije(),List_Continents[k].GetListCountries(imin).GetForma_Pravl(),List_Continents[k].GetListCountries(imin).GetPloshad(),i);
List_Continents[k].SetListCountries(temp.GetName_Country(),temp.GetNaselenije(),temp.GetForma_Pravl(),temp.GetPloshad(),imin);
}
}
int main()
{
{
int i;
char *a,*f;
float s=12,p=32;
a=new char [200];
f=new char [200];
strcpy(a,"Name_Country_ 1");
strcpy(f,"Form");
Obrabotchik A;
A.CreateListContinents();
/*
for(i=0;i<n;i++)
A.GetListContinents(i).Print_Cont();
*/
A.GetListContinents(0).Delete_Country(a);
//A.GetListContinents(0).Create_Country(a,s,p,f);
for(i=0;i<m;i++)
A.GetListContinents(i).Print_Cont();
}
system("pause");
return 0;
}
[/more]
Levenyatko O
Не определена переменная n в функции Continent::Create_Country()
А компилятор уже не справляется с поиском ошибок?
Не определена переменная n в функции Continent::Create_Country()
А компилятор уже не справляется с поиском ошибок?
Levenyatko O
Просмотрел несколько первых строчек начало тошнить.
Советую почитать любую книгу по ООП, и прежде чем писать что-то продумать, схему объектов и их свойств (лучше на бумажке нарисовать квадратиками объекты и свойста-переменные, которые их описывают). К примеру количество стран должно быть по логике быть впихнуто в объект континент, а не валяться где попало в глобальной видимости.
Просмотрел несколько первых строчек начало тошнить.
Советую почитать любую книгу по ООП, и прежде чем писать что-то продумать, схему объектов и их свойств (лучше на бумажке нарисовать квадратиками объекты и свойста-переменные, которые их описывают). К примеру количество стран должно быть по логике быть впихнуто в объект континент, а не валяться где попало в глобальной видимости.
Цитата:
karakurt2
Не определена переменная n в функции Continent::Create_Country()
n определена глобально, причем инициализируется не нулем: int n=Col_Count;
и в каждом Create_Country() оно дальше увеличивается...
умом сей код мне не понять :/
Есть такой вопрос: есть он-лайн тестировщики (типа он-лайн олимпиад и прочего). Есть ли чего свободного, чтобы можно было поднять (на сервере под nix), чтобы он там "в песочнице" компилировал С/C++ код (переданный, допустим, по http через стандартную форму загрузки), ну и запускал на выполнение...
PS
Понимаю, что не в топик, но какая тема правильная - не пойму.
PS
Понимаю, что не в топик, но какая тема правильная - не пойму.
Всем доброго времени суток !
Люди научите пожалуйста следующему:
В MySQL я создал элементарную таблицу из двух полей:
id тип SERIAL (первичный ключ)
name тип VARCHAR(100)
Занес в созданную таблицу несколько значений соответствующих полей базы данных
Теперь я хотел бы из Visual Studio 2012 получить доступ к полям созданной мною базы в MySQL - просто прочесть и занести в элементарные переменные в языке C++
-----------
Предварительно установил MySQL Connector C++ 1.1.1 WIN32
В Visual Studio 2012 хотел бы реализовать именно на C++ (а не на C#)
Именно в консольном приложении, а не в WIN32 (для простоты)
-----------
Что дальше ?
Попробовал сделать как здесь http://dev.mysql.com/doc/refman/5.1/en/connector-cpp.html
но там что то каталоги MySQL не совпадают с моими и одной либы ( libmysql.lib ) не нашел
Был бы признателен если бы объяснили как можно детальнее - для новичка
Спасибо
Люди научите пожалуйста следующему:
В MySQL я создал элементарную таблицу из двух полей:
id тип SERIAL (первичный ключ)
name тип VARCHAR(100)
Занес в созданную таблицу несколько значений соответствующих полей базы данных
Теперь я хотел бы из Visual Studio 2012 получить доступ к полям созданной мною базы в MySQL - просто прочесть и занести в элементарные переменные в языке C++
-----------
Предварительно установил MySQL Connector C++ 1.1.1 WIN32
В Visual Studio 2012 хотел бы реализовать именно на C++ (а не на C#)
Именно в консольном приложении, а не в WIN32 (для простоты)
-----------
Что дальше ?
Попробовал сделать как здесь http://dev.mysql.com/doc/refman/5.1/en/connector-cpp.html
но там что то каталоги MySQL не совпадают с моими и одной либы ( libmysql.lib ) не нашел
Был бы признателен если бы объяснили как можно детальнее - для новичка
Спасибо
limarukraine
Цитата:
Ничего страшного. Действуйте по шаблону: мойкаталогдляmysql\... вместо C:\mysql\...
Цитата:
Идите по простому пути. Для сложного пути нужно скачать MySQL Connector/C (в частности, для взятия libmysql.lib - для динамического связывания она вам не нужна), как минимум.
И еще: т. к. у вас VS12, а библиотека рассчитана на VS8, то могут возникнуть проблемы с компиляцией. Прочтите в этом случае советы в комментариях для проблем с VS10.
Цитата:
но там что то каталоги MySQL не совпадают с моими
Ничего страшного. Действуйте по шаблону: мойкаталогдляmysql\... вместо C:\mysql\...
Цитата:
и одной либы ( libmysql.lib ) не нашел
Идите по простому пути. Для сложного пути нужно скачать MySQL Connector/C (в частности, для взятия libmysql.lib - для динамического связывания она вам не нужна), как минимум.
И еще: т. к. у вас VS12, а библиотека рассчитана на VS8, то могут возникнуть проблемы с компиляцией. Прочтите в этом случае советы в комментариях для проблем с VS10.
народ помогите переделать вывод проги. надо чтобы кроме количествакниг выдавала их названия(прога находит количество книг заданого автора)
[more]
Код:
#include<string.h>
#include<stdio.h>
#include<conio.h>
#include<iostream.h>
struct library
{
char name[50];
char avtor[50];
float cost;
};
void main()
{
int k,p,n,i;k=0;p=0;
char s[50];
clrscr();
cout<<"Vvedite kol-vo:\n";
cin>>n;
library *a=new library[n];
clrscr();
for (i=0;i<n;i++)
{
cout<<"Name: ";
cin>>a[i].name;
cout<<"Avtor: ";
cin>>a[i].avtor;
cout<<"Cost: ";
cin>>a[i].cost;
cout<<"--------------------------------------------------------------------------------";
}
cout<<"Enter the avtor for search: ";
cin>>s;
clrscr();
for (i=0;i<n;i++)
if(strcmp(a[i].avtor,s)==0)
{p++;k++;}
if(k==0) cout<<"Error !!!";
else cout<<"Kol-vo knig avtora "<<s<<" : "<<p<<"\n";
getch();
}
[more]
Код:
#include<string.h>
#include<stdio.h>
#include<conio.h>
#include<iostream.h>
struct library
{
char name[50];
char avtor[50];
float cost;
};
void main()
{
int k,p,n,i;k=0;p=0;
char s[50];
clrscr();
cout<<"Vvedite kol-vo:\n";
cin>>n;
library *a=new library[n];
clrscr();
for (i=0;i<n;i++)
{
cout<<"Name: ";
cin>>a[i].name;
cout<<"Avtor: ";
cin>>a[i].avtor;
cout<<"Cost: ";
cin>>a[i].cost;
cout<<"--------------------------------------------------------------------------------";
}
cout<<"Enter the avtor for search: ";
cin>>s;
clrscr();
for (i=0;i<n;i++)
if(strcmp(a[i].avtor,s)==0)
{p++;k++;}
if(k==0) cout<<"Error !!!";
else cout<<"Kol-vo knig avtora "<<s<<" : "<<p<<"\n";
getch();
}
Доброго дня. Подскажите, можно ли такое сделать. Есть объекты класса с некоторыми полями. Нужно занести каждый объект в отдельную строку StringGrid-а, но! стоит требование: для отображения полей объектов не использовать свойства Cells, Cols, Rows. Как еще занести что-то в StringGrid?
bomzzz
msdn?
msdn?
NOTIFYICONDATA это вообще для иконки в трее.
сообщение TTM_SETTITLE устанавливает в тултипе заголовок и иконку
http://msdn.microsoft.com/ru-ru/library/windows/desktop/bb760414%28v=vs.85%29.aspx
из надобра стандартных
Цитата:
а чтоб ее изменить на свою надо знать как она приделывается системой. примеров не нагуглилось
сообщение TTM_SETTITLE устанавливает в тултипе заголовок и иконку
http://msdn.microsoft.com/ru-ru/library/windows/desktop/bb760414%28v=vs.85%29.aspx
из надобра стандартных
Цитата:
TTI_NONE No icon.
TTI_INFO Info icon.
TTI_WARNING Warning icon
TTI_ERROR Error Icon
TTI_INFO_LARGE Large error Icon
TTI_WARNING_LARGE Large error Icon
TTI_ERROR_LARGE Large error Icon
а чтоб ее изменить на свою надо знать как она приделывается системой. примеров не нагуглилось
bomzzz
Цитата:
А повнимательнее свою же ссылку прочитать не судьба?
Цитата:
И пример там очень даже в тему.
Цитата:
сообщение TTM_SETTITLE устанавливает в тултипе заголовок и иконку
http://msdn.microsoft.com/ru-ru/library/windows/desktop/bb760414%28v=vs.85%29.aspx
из надобра стандартных
А повнимательнее свою же ссылку прочитать не судьба?
Цитата:
As of Windows XP SP2 and later, this parameter can also contain an HICON value. Any value greater than TTI_ERROR is assumed to be an HICON.
И пример там очень даже в тему.
да уж прочел прежде чем спрашивать и попробовал
все попробовал и системную иконку, и свою иконку, и разных размеров, и вытащил системную картинку. не выводится. статьи которые гуглятся частично утверждают что выводятся только из списка. у меня сп3. потому и ссылку не стал на мсдн приводить чтоб мозги не компостировали мсдном. рабочего примера не удалось найти ни на дельфятине ни на си
все попробовал и системную иконку, и свою иконку, и разных размеров, и вытащил системную картинку. не выводится. статьи которые гуглятся частично утверждают что выводятся только из списка. у меня сп3. потому и ссылку не стал на мсдн приводить чтоб мозги не компостировали мсдном. рабочего примера не удалось найти ни на дельфятине ни на си
SetWindowTheme - вроде как то надо эту фигню использовать. но рабочего примера нет
Рабочий (на win7) пример:
void toTray(HWND hDlg)
{
RECT desktopRect, dlgRect;
NOTIFYICONDATA nid;
GetWindowRect(GetDesktopWindow(), &desktopRect);
GetWindowRect(hDlg, &dlgRect);
desktopRect.left = desktopRect.right;
desktopRect.top = desktopRect.bottom;
DrawAnimatedRects(hDlg, IDANI_CAPTION, &dlgRect, &desktopRect);
ShowWindow(hDlg, SW_HIDE);
nid.cbSize = sizeof(nid);
nid.hWnd = hDlg;
nid.uID = 0;
nid.uFlags = NIF_ICON | NIF_MESSAGE | NIF_TIP | NIF_INFO | NIF_STATE;
nid.uCallbackMessage = WM_USER;
nid.hIcon = LoadIcon(g_hInst, MAKEINTRESOURCE(2001));
strcpy(nid.szTip, "Double-click to maximize");
nid.dwState = nid.dwStateMask = nid.uTimeout = 0;
nid.dwInfoFlags = NIIF_USER;
strcpy(nid.szInfo, "My cool icon");
strcpy(nid.szInfoTitle, "Icon Test");
nid.hBalloonIcon = 0;
Shell_NotifyIcon(NIM_ADD, &nid);
}
int __stdcall DialogProc(HWND hDlg, UINT msg, WPARAM wParam, LPARAM lParam)
{
...
case WM_SYSCOMMAND:
if(LOWORD(wParam) == SC_MINIMIZE)
toTray(hDlg);
break;
...
}
void toTray(HWND hDlg)
{
RECT desktopRect, dlgRect;
NOTIFYICONDATA nid;
GetWindowRect(GetDesktopWindow(), &desktopRect);
GetWindowRect(hDlg, &dlgRect);
desktopRect.left = desktopRect.right;
desktopRect.top = desktopRect.bottom;
DrawAnimatedRects(hDlg, IDANI_CAPTION, &dlgRect, &desktopRect);
ShowWindow(hDlg, SW_HIDE);
nid.cbSize = sizeof(nid);
nid.hWnd = hDlg;
nid.uID = 0;
nid.uFlags = NIF_ICON | NIF_MESSAGE | NIF_TIP | NIF_INFO | NIF_STATE;
nid.uCallbackMessage = WM_USER;
nid.hIcon = LoadIcon(g_hInst, MAKEINTRESOURCE(2001));
strcpy(nid.szTip, "Double-click to maximize");
nid.dwState = nid.dwStateMask = nid.uTimeout = 0;
nid.dwInfoFlags = NIIF_USER;
strcpy(nid.szInfo, "My cool icon");
strcpy(nid.szInfoTitle, "Icon Test");
nid.hBalloonIcon = 0;
Shell_NotifyIcon(NIM_ADD, &nid);
}
int __stdcall DialogProc(HWND hDlg, UINT msg, WPARAM wParam, LPARAM lParam)
{
...
case WM_SYSCOMMAND:
if(LOWORD(wParam) == SC_MINIMIZE)
toTray(hDlg);
break;
...
}
сенки. буду разбираться.
Код: #include <iostream>
using namespace std;
const int SIZEARRAY=99;
struct FamNumber
{
char index[SIZEARRAY];
char family[SIZEARRAY];
char namber[SIZEARRAY];
};
int main()
{
FamNumber dataInfo[SIZEARRAY];
dataInfo[0].family="shjfd";//курсор ошибки тут!
return 0;
}
deadka1313
Потому что dataInfo[0].family - это константа, ее значение менять нельзя.
Читайте про массивы в Си.
Потому что dataInfo[0].family - это константа, ее значение менять нельзя.
Читайте про массивы в Си.
проблема оказалась сильно хитрая. она в манифестах (что это такое и с чем его едят я толком еще не разобрался) и в том, что у меня какими то оптимизаторами в системе что то отключено. рабочий вариант мне показали на картинке но он у меня не работает.
Не могу найти информацию по алгоритму поиска решения головоломки пентамино - на вход поступает законченная фигура в виде текстового файла из нолей и единиц, на выходе нужно разбить эту фигуру на части заданными деталями. В общих чертах, кажется, нужно следующее: сделать рекурсию до тех пор, пока неразбитая часть не равна одной из элементарных фигур, а если она не равна, то, начиная с, допустим, левого верхнего угла подставлять любую фигуру, затем: если она не подходит, переходим к следующей, если подходит, начинаем разбивать то, что получилось в результате. Если в конце концов получается фигура, не соответствующая ни одной из элементарных, идем на шаг назад и ставим другую фигуру(нужно хранить id фигуры, примененной на прошлом шаге). Только кажется, что такой перебор с возратом может никогда не найти нужное решение. Кажется, должен быть стандартный алгоритм, который нужно адаптировать к этому случаю. Никто не знает, какой?
Страницы: 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193
Предыдущая тема: не знаю как назвать тему :-)
Форум Ru-Board.club — поднят 15-09-2016 числа. Цель - сохранить наследие старого Ru-Board, истории становления российского интернета. Сделано для людей.