Массив из слов
имя[1]=Коля
имя[2]=Маша
имя[3]=Карбюратор
И что-то сильно всё это на с++ запутанно... Типа (данных) "стринг" не существует, поэтому создаю его
typedef char slovo[15];
после обьявляю массив
slovo name[5];
не пашет.
пишет cannot convert from 'char [5]' to 'char [15]'
если сделать
name[1]="TekiL";
cout<<endl<<name[1];
как правильно такое замутить??
спасибо
зы хуже всего что потом нужно будет делать что-то вроде Рост[имя[1]]=190.. совсем мозги плавятся...
[ Это Сообщение было отредактировано TekiL в 2002-03-31 1736 ]
"Коля", "Маша", "Карбюратор", NULL
};
int cWords = sizeof(ppszWords)/sizeof(ppszWords[0]);
при этом cWords будет равно 3
for (int i=0; i<cWords; i++) cout<<ppszWords;
или
i = 0;
while(ppszWords) cout<<ppszWords;
но тебе это не поможет, контейнеры типа Рост[имя[1]] = 190см называются dictionary(словарь) и простым массивом строк не обойтись. это всётаки C++ а не VB
Для начала попробуй сделать что-то типа этого
struct PEOPLE
{
int nAge, nWeight, nHeight;
char*pszName;
bool bUsed;
};
class CPeoples
{
int m_cPeoples;
PEOPLE m_tPeoples[120];
...
public
bool Add(const PEOPLE& rPeople);
bool Remove(int i);
bool RemoveByName(int i);
...
PEOPLE *GetByName(const char*pszName)
{
PEOPLE *p = m_tPeoples;
for (int i=0; i<120; i++, p++)
{
if (p->bUsed)
{
if (strcmp(p->pszName, pszName)==0)
return p;
}
}
return NULL;
}
PEOPLE *operator[](const char*pszName)
{
return GetByName(pszName);
}
...
};
тогда
CPeoples pc;
..
pc.Add(....);
pc.Add(....);
...
PEOPLE *p = pc["Маша"];
p->nHeight = 190;
P.S. Я писал прямо в постинг и ничего не проверял, возможно наличие опечаток и прочей ерунды.
On 2002-04-01 0009, Arestov wrote
char *ppszWords[] ={
"Коля", "Маша", "Карбюратор", NULL
};
int cWords = sizeof(ppszWords)/sizeof(ppszWords[0]);
при этом cWords будет равно 3
for (int i=0; i<cWords; i++) cout<<ppszWords;
или
i = 0;
while(ppszWords) cout<<ppszWords;
но тебе это не поможет, контейнеры типа Рост[имя[1]] = 190см называются dictionary(словарь) и простым массивом строк не обойтись. это всётаки C++ а не VB
Для начала попробуй сделать что-то типа этого
struct PEOPLE
{
int nAge, nWeight, nHeight;
char*pszName;
bool bUsed;
};
class CPeoples
{
int m_cPeoples;
PEOPLE m_tPeoples[120];
...
public
bool Add(const PEOPLE& rPeople);
bool Remove(int i);
bool RemoveByName(int i);
...
PEOPLE *GetByName(const char*pszName)
{
PEOPLE *p = m_tPeoples;
for (int i=0; i<120; i++, p++)
{
if (p->bUsed)
{
if (strcmp(p->pszName, pszName)==0)
return p;
}
}
return NULL;
}
PEOPLE *operator[](const char*pszName)
{
return GetByName(pszName);
}
...
};
тогда
CPeoples pc;
..
pc.Add(....);
pc.Add(....);
...
PEOPLE *p = pc["Маша"];
p->nHeight = 190;
P.S. Я писал прямо в постинг и ничего не проверял, возможно наличие опечаток и прочей ерунды.
ого! ))
айм ин шок типа! )
вообще-то я уже гораздо проще сделал
int main() {
char nom_mat[20][15]; //названия предметов (максимум 20 штук по 15 литер)
int m=0;
int x=0;
int y=0;
int note[20][15];
int num[20];
int somme[20];
double moyenne[20]; //всякая остальная фигня
//-----
cout<<"Introduisez nom matiere ("<<m+1<<") -- ";
cin.getline(nom_mat[m], 15, '\n');
m++;
} while (nom_mat[m-1][0]!=' ');
m-=1;
//вводим по одноиу названия предметов (остановка - пробел)
//-----
for (x=0; x<m; x++)
{
do {
cout<<"Introduisez la note ("<<nom_mat[x]<<")("<<y+1<<") -- ";
cin>>note[x][y];
y++;
} while (note[x][y-1]<=20);
num[x]=y-1;
y=0;
}
//вводим по одной все наши двойки для каждого предмета (по очереди типа) (остановка - оценка > 20. потом с пробелом сделаю нормально...)
//-----
for (x=0; x<m; x++)
{
somme[x]=0;
for (y=0; y<num[x]; y++)
somme[x]=somme[x]+note[x][y];
moyenne[x]=somme[x]/num[x];
}
//считаем среднюю для каждого предмета
как видешь ни булей ни пойнтеров (хотя можно было-бы обойтись меньшим кол-вом переменных. но гемморойнее)
зы у меня тут вариабла moyenne типа double, но при делении (например) 13 на 4 выдаёт 3.0000000 (с такой блин точностью и неправильно)