Отправляет email-рассылки с помощью сервиса Sendsay
  Все выпуски  

RFpro.ru: Программирование на C / C++


Хостинг портала RFpro.ru:
Московский хостер
Профессиональный ХОСТИНГ на базе Linux x64 и Windows x64

РАССЫЛКИ ПОРТАЛА RFPRO.RU

Лучшие эксперты данной рассылки

Гаряка Асмик
Статус: Профессор
Рейтинг: 5770
∙ повысить рейтинг »
Boriss
Статус: Академик
Рейтинг: 2594
∙ повысить рейтинг »
Абаянцев Юрий Леонидович aka Ayl
Статус: Профессионал
Рейтинг: 2162
∙ повысить рейтинг »

/ КОМПЬЮТЕРЫ И СОФТ / Программирование / C/C++

Номер выпуска:1609
Дата выхода:13.12.2010, 02:00
Администратор рассылки:Verena (Профессионал)
Подписчиков / экспертов:331 / 179
Вопросов / ответов:2 / 2

Вопрос № 181145: Здравствуйте, уважаемые эксперты! Вопрос достаточно банальный, но я как-то не соображу никак. Есть проект test в Visual C++ 2008. В него входят заголовочные файлы, ресурсы и исходные файлы. В данный момент есть один исходный файл: test.c...


Вопрос № 181157: Здравствуйте, уважаемые эксперты! Прошу Вас помочь с переделыванием программ в приложении, написаных на code blocks, в одну программу с динамическими структурами. Хочется в готовой программе увидеть следующий вывод: http://s43.radikal.ru/i102/101...

Вопрос № 181145:

Здравствуйте, уважаемые эксперты!

Вопрос достаточно банальный, но я как-то не соображу никак.
Есть проект test в Visual C++ 2008. В него входят заголовочные файлы, ресурсы и исходные файлы.
В данный момент есть один исходный файл: test.cpp
В этом файле содержатся две подпрограммы: sub1 и sub2. Обе эти подпрограммы используют общие глобальные переменные, которые также перечислены в файле test.cpp.
Задача: вынести подпрограмму sub2 в отдельный файл sub2.cpp, включив его в проект test.
Таким образом в проекте окажется два исходных файла: test.cpp с подпрограммой sub1 и sub2.cpp с подпрограммой sub2.

Вопрос: каким образом надо модифицировать файлы test.cpp и sub2.cpp?

Отправлен: 07.12.2010, 16:01
Вопрос задал: Калашников О.А. (Руководитель)
Всего ответов: 1
Страница вопроса »


Отвечает Гаряка Асмик (Профессор) :
Здравствуйте, Калашников О.А.!

Глобальные переменные в sub2.cpp надо описать с ключевым словом extern. Это значит, что они определены где-то еще. После этого их можно использовать. Линковщик найдет эти переменные в файле test.obj, и все будет хорошо. Другой способ - описать эти переменные в заголовочном файле. Тогда в начале файла поставить надо #pragma once
Если одна из подпрограмма вызывает другую, ее тоже можно объявить со словом extern

Ответ отправил: Гаряка Асмик (Профессор)
Ответ отправлен: 07.12.2010, 16:09
Номер ответа: 264573

Вам помог ответ? Пожалуйста, поблагодарите эксперта за это!
Как сказать этому эксперту "спасибо"?
  • Отправить SMS #thank 264573 на номер 1151 (Россия) | Еще номера »
  • Отправить WebMoney:
  • Ответ поддержали (отметили как правильный): 1 чел.



    Вопрос № 181157:

    Здравствуйте, уважаемые эксперты! Прошу Вас помочь с переделыванием программ в приложении, написаных на code blocks, в одну программу с динамическими структурами.
    Хочется в готовой программе увидеть следующий вывод: http://s43.radikal.ru/i102/1011/cc/79e92bc876cb.png
    Спасибо.

    Отправлен: 07.12.2010, 21:37
    Вопрос задал: Aptemis (Посетитель)
    Всего ответов: 1
    Страница вопроса »


    Отвечает Лысков Игорь Витальевич (Старший модератор) :
    Здравствуйте, Aptemis!
    Вот такая получилась программа для работы со списком
    Код:
    #include <stdio.h>
    #include <string.h>
    #include <malloc.h>

    #define SIZE 4
    #define MAX_BALLS 4

    typedef struct
    {
    int year;
    int month;
    int day;
    } Born;

    typedef struct student
    {
    char FIO[20];
    char Gender[2];
    Born b;

    char City[30];
    int Balls[MAX_BALLS];
    student *Next;
    student *Prev;
    } Student;

    void InsertStudent(Student **, Student *);
    void Print_Group(Student *);
    int Izm_Group(Student *, Student **);
    void Sort_Group(Student **);
    void Free_Memory(Student *);

    void Ins ertStudent(Student ** head, Student * tek)
    {
    Student * i;
    tek->Next = NULL;
    if (*head == NULL)
    {
    *head = tek;
    tek->Prev = NULL;
    }
    else
    {
    for (i=*head; i->Next; i=i->Next);
    i->Next = tek;
    tek->Prev = i;
    }
    }

    int main()
    {
    Student *headGROUP = NULL;
    Student *headGROUP1 = NULL;
    Student *tek;
    int count;

    for ( int i = 0; i<SIZE; i++)
    {
    tek = (Student*)malloc(sizeof Student);
    printf("\nNAME: ");
    scanf("%s", tek->FIO);

    printf("Gender(m/f): ");
    scanf("%s", tek->Gender);

    printf("City : ");
    scanf("%s", tek->City);

    printf("Marks[%d] : ", MAX_BALLS);
    for (int j=0;j<MAX_BALLS;j++)
    scanf("%d", &tek->Balls[j]);
    InsertStudent(&headGROUP, tek);
    }

    printf("______________________\n");
    pri ntf("\nVvednniy spisok[%i]\n",SIZE);
    printf("______________________\n");
    Print_Group(headGROUP);
    printf("\n");

    count = Izm_Group(headGROUP,&headGROUP1);
    printf("______________________\n");
    printf("Sokrazhennyi spisok[%i]\n",count);
    printf("______________________\n");
    Print_Group(headGROUP1);
    printf("\n");

    Sort_Group(&headGROUP1);
    printf("______________________\n");
    printf("Otsortirovannyi spisok[%i]\n",count);
    printf("______________________\n");
    Print_Group(headGROUP1);

    Free_Memory(headGROUP);
    Free_Memory(headGROUP1);
    return 0;
    }

    void Free_Memory(Student *head)
    {
    Student *tek, *next;
    for(tek=head; tek; tek=next)
    {
    next = tek->Next;
    free(tek);
    }
    }

    void Print_Group(Student *head)
    {
    Student *tek;
    int j;
    double sum;

    printf(&qu ot;\nName\tGender\tCity\tMarks\tSredniy ball\n");

    for(tek=head; tek; tek=tek->Next)
    {
    printf("%s\t%s\t%s\t", tek->FIO, tek->Gender, tek->City);
    for(j=0, sum=0.0; j<MAX_BALLS; j++)
    {
    sum+=tek->Balls[j];
    printf("%d ", tek->Balls[j]);
    }
    printf("%4.2f\n", sum/MAX_BALLS);
    }
    }

    int Izm_Group(Student *headOld, Student **headNew)
    {
    Student *tek, *tek1;
    int count=0;

    for(tek=headOld; tek; tek=tek->Next)
    {
    if((strcmp(tek->Gender,"f")==0)&&(strcmp(tek->City,"SPb")==0))
    {
    tek1 = (Student*)malloc(sizeof Student);
    *tek1 = *tek;
    InsertStudent(headNew, tek1); //заполняем новый список
    count++;
    }
    }
    return count;
    }

    void Sort_Group(Student **head)
    {
    Student *tek1, *tek2, *work;
    int k, sum1, sum2;

    for(tek1=*head; tek1; tek1=tek1->Next)
    for(te k2=tek1->Next; tek2; tek2=tek2->Next)
    {
    for (k=0, sum1=0; k<MAX_BALLS; k++)
    sum1+=tek1->Balls[k];

    for (k=0, sum2=0; k<MAX_BALLS; k++)
    sum2+=tek2->Balls[k];

    if(sum1>sum2)
    { //меняем местами ссылки в структурах
    if (tek1->Next != tek2)
    { //если стоят не рядом
    work = tek1->Next;
    tek1->Next = tek2->Next;
    tek2->Next = work;

    work = tek1->Prev;
    tek1->Prev = tek2->Prev;
    tek2->Prev = work;

    tek1->Prev->Next = tek1;
    if (tek1->Next)
    tek1->Next->Prev = tek1;
    tek2->Next->Prev = tek2;
    if (tek2->Prev)
    tek2->Prev->Next = tek2;
    else
    *head = tek2;
    }
    else
    { //следуют друг за другом
    tek1->Next = tek2->Next;
    tek2->Next = tek1;
    tek2->Prev = tek1->Prev;
    tek1->Prev = tek2;
    if (tek2->Prev)
    tek2->Prev->Next = tek2;
    else
    *head = tek2;
    if (tek1->Next)
    tek1->Next->Prev = tek1;
    }
    work = tek1;
    tek1 = tek2;
    tek2 = work;
    }
    }
    }

    -----
    Люби своего ближнего, как самого себя

    Ответ отправил: Лысков Игорь Витальевич (Старший модератор)
    Ответ отправлен: 08.12.2010, 09:46
    Номер ответа: 264585
    Украина, Кировоград
    Тел.: +380957525051
    ICQ # 234137952
    Mail.ru-агент: igorlyskov@mail.ru

    Оценка ответа: 5

    Вам помог ответ? Пожалуйста, поблагодарите эксперта за это!
    Как сказать этому эксперту "спасибо"?
  • Отправить SMS #thank 264585 на номер 1151 (Россия) | Еще номера »
  • Отправить WebMoney:


  • Оценить выпуск »
    Нам очень важно Ваше мнение об этом выпуске рассылки!

    Задать вопрос экспертам этой рассылки »

    Скажите "спасибо" эксперту, который помог Вам!

    Отправьте СМС-сообщение с тестом #thank НОМЕР_ОТВЕТА
    на короткий номер 1151 (Россия)

    Номер ответа и конкретный текст СМС указан внизу каждого ответа.

    Полный список номеров »

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


    © 2001-2010, Портал RFPRO.RU, Россия
    Авторское право: ООО "Мастер-Эксперт Про"
    Автор: Калашников О.А. | Программирование: Гладенюк А.Г.
    Хостинг: Компания "Московский хостер"
    Версия системы: 2010.6.24 от 30.11.2010

    В избранное