Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > C/C++ программирование > Общие вопросы C/C++
Регистрация

Восстановить пароль

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 01.04.2012, 13:40   #11
Vago
Форумчанин
 
Регистрация: 15.01.2010
Сообщений: 948
По умолчанию

Адреса. Адреса двух разных одномерных символьных массивов. Переменные man1 и man2 - разные, байты man1.namem[0] и man2.namem[0] расположены в разных местах памяти, адреса - разные, поэтому и результат такой, на первый взгляд - удивительный, ибо содержимое строк - одинаково.
Vago вне форума Ответить с цитированием
Старый 01.04.2012, 13:57   #12
LiuLiuJons
Форумчанин
 
Регистрация: 28.12.2011
Сообщений: 124
По умолчанию

Цитата:
Сообщение от Vago Посмотреть сообщение
Адреса. Адреса двух разных одномерных символьных массивов. Переменные man1 и man2 - разные, байты man1.namem[0] и man2.namem[0] расположены в разных местах памяти, адреса - разные, поэтому и результат такой, на первый взгляд - удивительный, ибо содержимое строк - одинаково.
Спасибо, интересный момент)) Была идея, что это адреса сравниваются..
"Думай не о задаче, а о решении" (с)
LiuLiuJons вне форума Ответить с цитированием
Старый 01.04.2012, 15:00   #13
ACE Valery
Сама себе режиссер
Старожил
 
Аватар для ACE Valery
 
Регистрация: 27.04.2007
Сообщений: 3,365
По умолчанию

Цитата:
Как я понимаю, уважаемый pproger придерживается принципа "имеющий уши да услышит!".
Я все равно не понимаю, в чем проблема. Если сравниваются типы, кроме строк, то в условии должно быть ==, а не присваивание. Если строки, то сравнение строк (strcmp). В приведенном изначально коде это вообще не строки, а черти-что... А черти-что сравнивается оператором ==. В любом случае там НЕ оператор =.

Но о чем здесь идет речь, если программа изначально неправильно написана, и условия этого там быть не должно? Причем сравниваются даже не значения, а непонятно что.

Цитата:
Я до банальности почти незнаю орфографию записи структур в С++.
Вы не знаете и перебор массивов.
Код:
if(inf.mas1[i][0]=mat.mas2[k][0])
Откуда i? Тот for, в котором есть эта i до данного места не доходит даже, потому что операторные скобки не расставлены.

Автор, вообще сделайте это все просто на массивах, но правильно (пусть в массиве будет только фамилия студента). А потом уже на структурах. Потому что ошибок здесь тьма. Можно, конечно, вам исправить программу, но вам-то от этого не будет никакой пользы.
Если я вас напрягаю или раздражаю, вы всегда можете забиться в угол и поплакать

Последний раз редактировалось ACE Valery; 01.04.2012 в 15:03.
ACE Valery вне форума Ответить с цитированием
Старый 01.04.2012, 16:59   #14
LordFerrum
Пользователь
 
Регистрация: 31.03.2012
Сообщений: 11
По умолчанию Сори

ACE Valery да вы полностью правы в том что просто тупо сделать код и выложить сюда то пользы это мне не даст!
Да но вот в задании сказано сделать с помошью структуры!
И действительно я еше очень зелен в С++ по этому такие некорректные у меня коды и рождает мой разум! Простите меня!!!
Если ваша программа имеет вид
#include<iostream.h> int main() { return 0; }
ТО вы без сомнений ГЕНИЙ!!!
LordFerrum вне форума Ответить с цитированием
Старый 01.04.2012, 17:40   #15
ACE Valery
Сама себе режиссер
Старожил
 
Аватар для ACE Valery
 
Регистрация: 27.04.2007
Сообщений: 3,365
По умолчанию

Я и говорю - сделайте без структуры, но правильно. А потом в структуры переделаем вместе. А то мне, допустим, не совсем понятно, как объяснить вам ошибки в структурах, если помимо них у вас ошибки в массивах, условиях и вообще в понимании задачи.

Код:
struct Olimp 
  {
        char inf;
        char mat;
        char total;
  };
Это не правильно. Первый вариант был правильным. Только с одной оговоркой: у вас что на информатику, что на математику должна быть одна структура. И вы не правильно берете за основу вид олимпиады. Главная сущность задачи - студент.
Код:
 struct Student {
        char name[10];
        char rating[3];
        char position[3];
        };
Далее у вас должны быть списки студентов, которые были на олимпиадах. То есть тут вам нужно два массива типа Student. Один массив - список студентов по предмету "информатика", другой - "математика". Но так как количество студентов у вас вводится с клавиатуры, вот так: OlimpInf car[inf] вам компилятор не должен разрешать сделать. Тут необходимо динамическое выделение памяти.
Код:
Student *informatica = new Student(inf);
Так же точно определяете массив для математики. Вводите туда данные(в оба массива)
Код:
for(int i = 0; i < inf; i++){
cout<<"Enter the full name of the participant olympiad in mathematics "<<endl;
         cin>>informatica[i].name; //так прокатит, если имя без пробелов (лучше использовать cin.getline())
         cout<<"Enter the rating(from 0 and to 100) of the participant olympiad in mathematics "<<endl;
         cin>>informatica[i].rating;
         cout<<"Enter the session participants stand olympiad in mathematics \n (from 0 and to 100) "<<endl;
         cin>>informatica[i].position;  
}
Далее. Нам неизвестно, сколько студентов сдавали одновременно и то и то. Ну для начала покатит как вы и делали, создать массив размерностью КОЛИЧЕСТВО_СТУДЕНТОВ_ИНФОРМАТИКОВ + КОЛИЧЕСТВО_СТУДЕНТОВ_МАТЕМАТИКОВ. Вообще в идеале сначала подсчитать размерность, а потом уж создавать массив. Но хотя бы так сделайте.
Когда вы создали третий массив (скорее всего это будет массив строк, если вам надо вывести только фамилии студентов, потому что рейтинг и позиция-то у одного студента разные по разным предметам, поэтому не будем пока на этом заморачиваться).
Далее вы сделаете цикл в цикле, в котором уже будете проверять условие, совпадают ли фамилии студентов в обоих массивах.
Код:
цикл по массиву_информатиков
цикл по массиву_математиков
если  strcmp(массив_информатиков[i].name, массив_математиков[i].name) == 0
тогда записываем это имя в третий массив
Вообще это структура это тот же тип. Возьмите подобную задачу с массивами типа int, вы же не идете циклом по инту?
Код:
for(int i=0;i<f;i++)
for(int j=0;j<3;j++)
{
         //что-то там...

}
Строка, подсвеченная красным - не нужна. Нельзя идти циклом по полям структуры. Вы просто должны обращаться к ним по имени.
Если я вас напрягаю или раздражаю, вы всегда можете забиться в угол и поплакать

Последний раз редактировалось ACE Valery; 01.04.2012 в 17:43.
ACE Valery вне форума Ответить с цитированием
Старый 01.04.2012, 18:19   #16
LordFerrum
Пользователь
 
Регистрация: 31.03.2012
Сообщений: 11
По умолчанию

Может быть во так??
Код:
#include<iostream.h>
#include<conio.h>

int main()
{
 cout<<"Enter the number of records in a table in computer science \n";
 int f;
 cin>>f;
 
 cout<<endl<<"Enter the number of records in a table in mathematics science \n";
 int t;
 cin>>t;
  
 int s;
 s=f+t;
  
  struct Olimp 
  {
        char name[10];
        int rat;
        int pos;
  };
 int r=0;
Olimp car[f], *point=&car[0]; 
Olimp carr[t], *mat=&carr[0]; 

for(int i=0;i<f;i++,point++,mat++)
  {
   cout<<endl<<"Enter the full name of the participant olympiad in informatics ";
   cin>>(*point).name;
   cout<<endl<<(*point).name;
  cout<<endl<<"Enter the rating(from 0 and to 100) of the participant olympiad in informatics ";
  cin>>(*point).rat;
  cout<<endl<<(*point).rat;
   cout<<endl<<"Enter the session participants stand olympiad in informatics \n (from 0 and to 100) ";
   cin>>(*point).pos;
   cout<<endl<<(*point).pos;
}
  for(int i=0;i<t;i++,mat++)
 {
   cout<<endl<<"Enter the full name of the participant olympiad in mathematics ";
   cin>>(*mat).name;
   cout<<endl<<(*mat).name;
  cout<<endl<<"Enter the rating(from 0 and to 100) of the participant olympiad in mathematics ";
  cin>>(*mat).rat;
  cout<<endl<<(*mat).rat;
   cout<<endl<<"Enter the session participants stand olympiad in mathematics \n (from 0 and to 100) ";
   cin>>(*mat).pos;
   cout<<endl<<(*mat).pos;
}
   


delete[] point;
delete[] mat;

Olimp carrr[t], *total=&carrr[0]; 
for(int j=0;j<f+t;j++,total++,point++,mat++)
{
        if((*point).name==(*mat).name)
   {
                               
     (*total).name==(*mat).name;
     (*total).rat==(*mat).rat;                     
     (*total).pos==(*mat).pos;
     }
        cout<<endl<<"___________________________________";
        cout<<(*total).name;
         cout<<endl<<"___________________________________";
         cout<<(*total).rat;
       cout<<endl<<"___________________________________";
       cout<<(*total).pos;
        cout<<endl<<"___________________________________";
}
delete[] total;
int k;
cin>>k;
return 0;
}
Она работает но кривовато!!!
И вот ешё что хотел спросить насчёт моей (кривой) записи f+t при выводе 3-го массива, где влепить счётчик((r)-который в программе уже есть) чтоб при проверки условия и выводе массива
Код:
for(int j=0;j<f+t;j++,total++,point++,mat++)
убрать эту "кривизну" (f+t)??
Если ваша программа имеет вид
#include<iostream.h> int main() { return 0; }
ТО вы без сомнений ГЕНИЙ!!!

Последний раз редактировалось LordFerrum; 01.04.2012 в 18:25.
LordFerrum вне форума Ответить с цитированием
Старый 01.04.2012, 23:15   #17
ACE Valery
Сама себе режиссер
Старожил
 
Аватар для ACE Valery
 
Регистрация: 27.04.2007
Сообщений: 3,365
По умолчанию

Объясните, плиз эту запись
Код:
Olimp car[f], *point=&car[0];
Зачем вы так делаете? И зачем вы делаете так:
Код:
for(int i=0;i<f;i++,point++,mat++)
  {
   cout<<endl<<"Enter the full name of the participant olympiad in informatics ";
   cin>>(*point).name;
Вы читали, что я написала? Вы неправильно объявляете массив. Мне вообще не понятно, как оно запускается у вас с кодом Olimp car[f]. Ну нельзя в Си создать массив с непонятным количеством элементов. Или за два года, которые я не программировала на Си, все поменялось?
Зачем вы в цикле инкрементируете point++,mat++? Этого делать не надо. Они вообще там не нужны. Я уже писала код, как надо обращаться к полям структуры в цикле. Давайте вы не будете гадать, "может так" или "не может так", а или прочитаете внимательно, что вам писали все по теме, или же решите задачу на массивах строк, а не структур. А в структуры потом переведете, когда программа будет работать.
Если я вас напрягаю или раздражаю, вы всегда можете забиться в угол и поплакать
ACE Valery вне форума Ответить с цитированием
Старый 01.04.2012, 23:40   #18
_Bers
Старожил
 
Регистрация: 16.12.2011
Сообщений: 2,329
По умолчанию

Цитата:
Сообщение от ACE Valery Посмотреть сообщение
Вы читали, что я написала? Вы неправильно объявляете массив. Мне вообще не понятно, как оно запускается у вас с кодом Olimp car[f]. Ну нельзя в Си создать массив с непонятным количеством элементов. Или за два года, которые я не программировала на Си, все поменялось?
В общем, какие то компиляторы уже позволяют. Какие то (например, мелкомягкий на 2008 студии) не позволяет.

http://ideone.com/2NjEo
_Bers вне форума Ответить с цитированием
Старый 01.04.2012, 23:55   #19
ACE Valery
Сама себе режиссер
Старожил
 
Аватар для ACE Valery
 
Регистрация: 27.04.2007
Сообщений: 3,365
По умолчанию

2010-я студия тоже не позволяет... Пичалька...
Тогда еще проще - не нужно никаких new и delete.
Если я вас напрягаю или раздражаю, вы всегда можете забиться в угол и поплакать
ACE Valery вне форума Ответить с цитированием
Старый 02.04.2012, 00:56   #20
Vago
Форумчанин
 
Регистрация: 15.01.2010
Сообщений: 948
По умолчанию

Цитата:
Сообщение от ACE Valery Посмотреть сообщение
Ну нельзя в Си создать массив с непонятным количеством элементов. Или за два года, которые я не программировала на Си, все поменялось?
Уважаемая ACE Valery,
#5
#19
Vago вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
структуры Alexander1205 Общие вопросы C/C++ 12 15.04.2011 21:15
Структуры Juguar Помощь студентам 0 12.01.2011 17:17
C++ структуры Chica Bond Общие вопросы C/C++ 6 01.05.2010 01:21
Структуры. Влад-mego Помощь студентам 1 12.04.2009 19:24
Структуры в СИ ManInBlack Помощь студентам 3 04.04.2009 19:08