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

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


Хостинг Портала RusFAQ.ru:
MosHoster.ru - Профессиональный хостинг на Windows 2008

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

Чемпионы рейтинга экспертов в этой рассылке

Alexandr A. Rakunov
Статус: 8-ой класс
Рейтинг: 111
∙ повысить рейтинг >>
realbustard
Статус: 6-ой класс
Рейтинг: 80
∙ повысить рейтинг >>
Verena
Статус: Практикант
Рейтинг: 54
∙ повысить рейтинг >>

/ КОМПЬЮТЕРЫ И ПО / Языки программирования / C/C++

Выпуск № 1149
от 01.11.2008, 20:35

Администратор:Калашников О.А.
В рассылке:Подписчиков: 420, Экспертов: 45
В номере:Вопросов: 8, Ответов: 11

Нам важно Ваше мнение об этой рассылке.
Оценить этот выпуск рассылки >>

Вопрос № 148533: Здравствуйте эксперты прошу вас о помощи! <img src="http://rusfaq.ru/images/Forum/10.gif" border="0"> Дана строка символов 1. Определить, сколько в ней слов начинающихся и кончающихся на одну и ту же букву. 2. Дана строка симвлов. Удал...


Вопрос № 148562: Доброе время суток! Мне нуждается помощь в программе, которая переворачивает буквы введённого слова. Например если мы вводим "тест", то выйти должно "тсет", т.е. этоже слово, тока задом на перёд. Заранее спасибо....
Вопрос № 148567: Здравствуйте уважаемые эксперты, помогите пожалуйста написать код программы Дана структура, задающая дату вида: Struct date {int day; int month; int year;}; Пользуясь таким структурным типом, составить программу, оп...
Вопрос № 148625: Добрый день, имеется код на с++, кото рый умножает числа не испульзуя знака умножения: #include <iostream> #include <cassert> using namespace std; int mult (int a, int b) { cout << " mult " << a &l...
Вопрос № 148642: Здраствуйте. Подскажите пожалуйста как можно изменить имя стандартного калькулятора с помощью Win 32 API??? ...
Вопрос № 148650: Что такое l-value в С++? Расскажите пожалуйста поподробнее....
Вопрос № 148683: Здравствуйте! Помогите пожалуйста! Срочно нужно сделать 2е задачки <img src="http://rusfaq.ru/images/Forum/10.gif" border="0"> : 1)Дан линейный, однонаправленный список. Написать функцию, которая удваивает каждый элемент списка 2)Дана строка с ...
Вопрос № 148697: Здравствуйте Эксперты! Помогите пожалуйста разобраться с задачей. Дана целочисленная прямоугольная матрица. Упло тнить матрицу, удалив из нее все строки, содержащие хотябы один нуль. Удалить их нужно таким образом: на место строк с нулем нужно ...

Вопрос № 148.533
Здравствуйте эксперты прошу вас о помощи!

Дана строка символов
1. Определить, сколько в ней слов начинающихся и кончающихся на одну и ту же букву.
2. Дана строка симвлов. Удалить из неё последний знак препинания.

Отправлен: 26.10.2008, 17:59
Вопрос задал: Константиниус (статус: Посетитель)
Всего ответов: 1
Мини-форум вопроса >>> (сообщений: 0)

Отвечает: Verena
Здравствуйте, Константиниус!
В обеих задачах использованы статические строки. В первой задаче мы идём по строке, пропуская пробелы, и сравнивая первую после пробела и последнюю перед пробелом буквы (это как раз и будут первая и последняя буквы слова, пробел или несколько - разделитель).
Код:
#include
<conio.h>
#include <string.h>
#include <iostream>
using namespace std;

int _tmain(int argc, _TCHAR* argv[])
{
char str [256], c; //Строка, символ
int k = 0, i = 0; //Счетчики
cout << "Vvedite stroku (ne bolee 255 simvolov) ";
gets (str); //Ввод строки
int l = strlen(str); //длина строки
while (i<l) { //пока не конец строки
while (i<l && str[i]==' ') i++; //пропу скаем пробелы
if (i>=l) break; //если строка кончилась, выходим
c = str[i]; //запоминаем первый символ слова
while (i<l && str[i]!=' ') i++; //доходим до конца слова
if (c==str[i-1]) k++; //сравниваем первый и последний символы и наращиваем счетчик в случае совпадения
}
cout << "Chislo slov: " << k; //вывод результата
_getch();
return 0;
}

Во второй задаче я считаю знаками препинания '.' ,',' , ';', '!', список при желании можно расширить, или выбрать какие-нибудь отрезки ascii таблицы, это не принципиально. Мы идём по строке, запоминая позицию символа, являющегося знаком препинания, соответственно, пройдя всю строку, в этой переменной мы получим позицию самого последнего знака. Далее мы сдвигаем всю строку на одну позицию влево, начиная с этого места, так он удаляется. Предусмотрен случай, если знаков препинания в строке нет.
Код:
#include <conio.h>
#include <string.h>
#include <iostream>
using namespace std;

int _tmain(int argc, _TCHAR* argv[])
{
char str [101]; //Строка
int k = -1;
cout << "Vvedite stroku (ne bolee 100 simvolov) ";
gets (str); //Ввод строки
int l = strlen(str); //длина строки
for (int i=0; i<l; i++)
if (str[i]=='.' || str[i]==',' || str[i]==';' || str[i]=='!') k = i; //Ищем знаки препинания, запомнится последний
if (k==-1)
cout << "Net znakov prepinania."; //вывод результата
else {
for (int i=k; i<l; i++) //идём до l, а не до l-1, чтобы и символ конца строки переместился
str[i] = str[i+1]; //Замещаем текущий символ следующим cout << str; //вывод результата
}
_getch();
return 0;
}

Удачи!
---------
Эта история - не для истории, понимаешь?
Ответ отправила: Verena (статус: Практикант)
Ответ отправлен: 28.10.2008, 16:37

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


    Вопрос № 148.562
    Доброе время суток! Мне нуждается помощь в программе, которая переворачивает буквы введённого слова. Например если мы вводим "тест", то выйти должно "тсет", т.е. этоже слово, тока задом на перёд. Заранее спасибо.
    Отправлен: 26.10.2008, 21:33
    Вопрос задал: Корыгин Леонид Игнатьевич (статус: Посетитель)
    Всего ответов: 3
    Мини-форум вопроса >>> (сообщений: 1)

    Отвечает: realbustard
    Здравствуйте, Корыгин Леонид Игнатьевич!
    Эта задача решена в вопросе 144745.
    Код решения в приложении.

    Приложение:

    ---------
    Учись так, как-будто собираешься жить вечно; живи так, как-будто завтра умрешь (Отто фон Бисмарк)

    Ответ отправил: realbustard (статус: 6-ой класс)
    Ответ отправлен: 26.10.2008, 21:39

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


    Отвечает: Alexandr A. Rakunov
    Здравствуйте, Корыгин Леонид Игнатьевич!
    Этот вопрос уже задавался:
    №144745

    Заменена ссылка на вопрос.
    --------
    ∙ Отредактировал: Зенченко Константин Николаевич, Профессор
    ∙ Дата редактирования: 29.10.2008, 10:57 (время московское)
    Ответ отправил: Alexandr A. Rakunov (статус: 8-ой класс)
    Ответ отправлен: 27.10.2008, 10:23

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


    Отвечает: Виктор Пырлик
    Здравствуйте, Корыгин Леонид Игнатьевич!

    вот код на C
    Код:
    //---------------------------------------------------------------------------
    #include <stdlib.h>
    #include <stdio.h>
    #include <string.h>
    #include <conio.h>
    //---------------------------------------------------------------------------
    void ReverceWord(char *sword)
    {
    int x = strlen(sword);
    char *t = (char*)calloc(x,sizeof(char));
    for(int i = 0;i <= x; i++)
    {
    t[i] = sword[x -i-1]; // меняем символ конца строки на начало
    }
    strcpy(sword,t); // копируем сроки
    free(t);
    }
    // главная программа
    int main(int argc, char* argv[])
    {
    char stemp[255] = {0};
    printf("input word: &quo t;);
    gets(stemp);
    ReverceWord(stemp);
    printf(" reverce word - %s ",stemp);
    getch();
    return 0;
    }
    //---------------------------------------------------------------------------


    ---------
    не получается там - где не пробуют
    Ответ отправил: Виктор Пырлик (статус: Профессионал)
    Россия, Екатеринбург
    Тел.: 89043822027
    ICQ: 490191733
    ----
    Ответ отправлен: 27.10.2008, 12:09

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


    Вопрос № 148.567
    Здравствуйте уважаемые эксперты, помогите пожалуйста написать код программы
    Дана структура, задающая дату вида:
    Struct date {int day;
    int month;
    int year;};
    Пользуясь таким структурным типом, составить программу, определяющую число суток, прошедших от заданной даты d1 до даты d2.
    Большое спасибо!
    Отправлен: 26.10.2008, 21:59
    Вопрос задал: Ruslank (статус: Посетитель)
    Всего ответов: 1
    Мини-форум вопроса >>> (сообщений: 3)

    Отвечает: Verena
    Здравствуйте, Ruslank!
    Для решения этой задачи нужно использовать некоторые закономерности, существующие в формировании дат. Например, так определяется месяц, в котором 30 дней:
    (((month<7 && month%2==0) || (month>7 && month%2!=0)) && month!=2)
    А так определяется високосный год:
    ((year%100!=0 && year%4==0) || year%400==0)
    Подойти к решению этой задачи можно по-разному. Можно считать по дням, по месяцам или по целым годам (поскольку известно, сколько дней в них содержится). Мне кажется наименее громоздким подсчёт по месяцам, поскольку последний вариант предполагает больше предварительной обработки, а лишние сравнения в данном случае не слишком затратны. Но Вы можете поэкспериментировать с другими вариантами, построив код по аналогии.
    Код в приложении, из комментариев должно быть всё ясно.
    Удачи!

    Приложение:

    ---------
    Эта история - не для истории, понимаешь?

    Ответ отправила: Verena (статус: Практикант)
    Ответ отправлен: 29.10.2008, 01:14

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

    Оценка за ответ: 4


    Вопрос № 148.625
    Добрый день, имеется код на с++, который умножает числа не испульзуя знака умножения:
    #include <iostream>
    #include <cassert>
    using namespace std;

    int mult (int a, int b)
    { cout << " mult " << a << " " << b << endl;
    return (a < 0) ? -mult(-a,b):
    ((a==0) ? 0 : mult(a-1,b) +b);
    }



    int main()
    { int a; cout << "Eingabe " << endl;
    cin >> a;
    int b; cout << "Eingabe " << endl;
    cin >> b;
    cout << mult(a,b) << endl;

    return 0;
    }
    , т.е. он высчитывает из первого числа 1 до тех пор, пока не дойдёт до 0. А потом складывает количество второго числа. Теперь требуется сделать тоже самое на деление (использовать можно тока + и -), надеюсь вы мне сможите помочь.
    Отправлен: 27.10.2008, 13:06
    Вопрос задал: Корыгин Леонид Игнатьевич (статус: Посетитель)
    Всего ответов: 2
    Мини-форум вопроса >>> (сообщений: 3)

    Отвечает: Sergey A. Wedensky
    Здравствуйте, Леонид Игнатьевич!

    Ну, например, так: код в приложении.
    Случай деления на 0 генерирует исключение char*, при необходимости обработайте сами как нужно.

    Приложение:

    Ответ отправил: Sergey A. Wedensky (статус: Студент)
    Ответ отправлен: 27.10.2008, 14:16

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


    Отвечает: Виктор Пырлик
    Здравствуйте, Корыгин Леонид Игнатьевич!

    Вот немного подправленная Ваша функция и функция деления.
    там и рекурсия как у Вас и цикл
    Код:
    #include <iostream>
    #include <cassert>
    using namespace std;

    /*рекурсивыее функции*/
    int multr (int a, int b)
    {
    return (a < 0) ? -multr(-a,b):((a==0) ? 0 : multr(a-1,b) +b);
    }
    //-----
    int devr(int a, int b)
    {
    static i = 0;
    if(b == 0) return 0;
    return (a < 0) ? -devr(-a,b):((b < 0) ? -devr(a,-b):((a < abs(b)) ? i : (i++,devr(a-abs(b),b))));
    }

    /* функции с циклами*/
    int mult (int a, int b)
    {
    int res = 0;
    for (int i = 1; i <= abs(b); i++)
    res += abs(a);
    return (((a<0) && (b<0)) || ((a>0) && (b & gt;0)))?res:-res;
    }
    //-----
    int dev (int a, int b)
    {
    int z = (((a<0) && (b<0)) || ((a>0) && (b >0)))?1:-1;
    a = abs(a);
    b = abs(b);
    if(a < b) return 0;
    int i = 1;
    while(a >=b)
    {
    i += (a -= b)>= b;
    }
    return (z>0)?i:-i;
    }
    /*главная функция*/
    int main()
    {
    int a;
    int b;
    cout << "multiplying"<<endl;
    cout << "a: "; cin >> a;

    cout << "b: "; cin >> b;
    cout << multr(a,b) << endl;

    cout << "************************";
    cout << endl << "fission"<<endl;
    cout << "a: "; cin >> a;
    cout << "b: "; cin >> b;
    cout << devr(a,b) << endl;
    return 0;
    }


    ---------
    не получается там - где не пробуют
    Ответ отправил: Виктор Пырлик (статус: Профессионал)
    Россия, Екатеринбург
    Тел.: 89043822027
    ICQ: 490191733
    ----
    Ответ отправлен: 27.10.2008, 15:35

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


    Вопрос № 148.642
    Здраствуйте. Подскажите пожалуйста как можно изменить имя стандартного калькулятора с помощью Win 32 API???
    Отправлен: 27.10.2008, 14:57
    Вопрос задал: Шараевский Олег Юрьевич (статус: Посетитель)
    Всего ответов: 1
    Мини-форум вопроса >>> (сообщений: 0)

    Отвечает: Sergey A. Wedensky
    Здравствуйте, Олег Юрьевич!

    А что значит "имя"?
    Если Вы имеете в виду заголовок окна, то окно можно найти, например, при помощи FindWindow по имени класса или текущему заголовку.
    Затем, поменять заголовок окну с известным дескриптором можно при помощи SetWindowText.
    Пример в приложении.

    Приложение:

    Ответ отправил: Sergey A. Wedensky (статус: Студент)
    Ответ отправлен: 27.10.2008, 15:33

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


    Вопрос № 148.650
    Что такое l-value в С++? Расскажите пожалуйста поподробнее.
    Отправлен: 27.10.2008, 15:24
    Вопрос задал: Leviaphan (статус: Посетитель)
    Всего ответов: 1
    Мини-форум вопроса >>> (сообщений: 0)

    Отвечает: Sergey A. Wedensky
    Здравствуйте, Leviaphan!

    Попросту говоря, l-value - это то, чему можно присваивать значение, т.е. выражение, которое может быть расположено слева от оператора присваивания (=). На самом деле это не совсем так, но для понимания проще всего.

    Формально, l-value - выражение типа, отличного от void, ссылающееся на область памяти. При этом l-value может быть и не модифицируемым. Например, переменная, объявленная как const является l-value, однако ее значение нельзя изменять:

    const int i = 0;
    i = 1; // error C3892: 'i' : you cannot assign to a variable that is const

    l-value может быть:
    - идентификатор переменной любого из следующих типов:
    - целочисленного
    - с плавающей точкой
    - указатель
    - структура (struct)
    - или союз (union)
    - выражение с индексом ([ ]) не являющееся само массивом
    - обращение к члену (–> или .)
    - выражение взятия значения (*) не являющееся массивом
    - любое l-value в скобка х
    - любое l-value со спецификатором const (немодифицируемое l-value)

    Ответ отправил: Sergey A. Wedensky (статус: Студент)
    Ответ отправлен: 27.10.2008, 15:47

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


    Вопрос № 148.683
    Здравствуйте! Помогите пожалуйста! Срочно нужно сделать 2е задачки :
    1)Дан линейный, однонаправленный список. Написать функцию, которая удваивает каждый элемент списка
    2)Дана строка с текстом, вывести кол-во слов в этой строке.
    Буду безгранично благодарен.
    PS Если можно, напишите самый простенький вариант...
    Отправлен: 27.10.2008, 18:58
    Вопрос задал: VetalO (статус: Посетитель)
    Всего ответов: 1
    Мини-форум вопроса >>> (сообщений: 0)

    Отвечает: Verena
    Здравствуйте, VetalO!
    Задачи очень простые. В первой - элементарная работа со списком, во второй - работа с символами строки. Во втором решении я не использовала динамическую память, строка статическая.
    Вот решение второй задачи:
    Код:
    #include <conio.h>
    #include <string.h>
    #include <iostream>
    using namespace std;


    int _tmain(int argc, _TCHAR* argv[])
    {
    char str [256];
    int k = 0, i = 0; //Счётчики
    cout << "Vvedite stroku (ne bolee 255 simvolov) ";
    gets (str); //Считываем строку
    int l = strlen(str); //Длина строки
    while (i<l) { //Пока не конец строки
    while (i<l && str[i]==' ') i++; //Пока идёт пробелы, пропускаем
    if (i<l) k++; //Если пробелы конч ились, а строка - нет, наращиваем счётчик
    while (i<l && str[i]!=' ') i++; //Идём до первого пробела, т.е. до конца слова
    }
    cout << "Chislo slov: " << k;
    _getch();
    return 0;
    }

    Решение первой задачи в приложении. Всё должно быть ясно из комментариев.
    Удачи!

    Приложение:

    ---------
    Эта история - не для истории, понимаешь?

    Ответ отправила: Verena (статус: Практикант)
    Ответ отправлен: 28.10.2008, 14:55

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

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


    Вопрос № 148.697
    Здравствуйте Эксперты! Помогите пожалуйста разобраться с задачей.
    Дана целочисленная прямоугольная матрица. Уплотнить матрицу, удалив из нее все строки, содержащие хотябы один нуль.
    Удалить их нужно таким образом: на место строк с нулем нужно снизу по порядку поднять и поставить строки без нулей.
    Я смог написать создание матрици и поиск строк с нулем, а вот с их передвиганием запутался. Помогите пожалуйста дописать программу. Код в приложении.

    Приложение:

    Отправлен: 27.10.2008, 20:24
    Вопрос задал: Andryuha (статус: Посетитель)
    Всего ответов: 1
    Мини-форум вопроса >>> (сообщений: 14)

    Отвечает: realbustard
    Здравствуйте, Andryuha!
    Данная задача решена в вопросе 147893.
    Решение приводится с использованием динамического и статического массива.
    Просто раскомментируйте нужный вариант.
    Код в приложении.
    Удачи!

    Приложение:

    ---------
    Учись так, как-будто собираешься жить вечно; живи так, как-будто завтра умрешь (Отто фон Бисмарк)

    Ответ отправил: realbustard (статус: 6-ой класс)
    Ответ отправлен: 28.10.2008, 00:26

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

    Оценка за ответ: 3
    Комментарий оценки:
    Спасибо за помощь, но дело в том, что мне не нужно создавать второй массив. Нужно передвинуть строки этого же массива вверх, на место строк с нулем. Поэтому этот вариант мне не подходит.


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

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

    Приложение (если необходимо):

    * Код программы, выдержки из закона и т.п. дополнение к вопросу.
    Эта информация будет отображена в аналогичном окне как есть.

    Обратите внимание!
    Вопрос будет отправлен всем экспертам данной рассылки!

    Для того, чтобы отправить вопрос выбранным экспертам этой рассылки или
    экспертам другой рассылки портала RusFAQ.ru, зайдите непосредственно на RusFAQ.ru.


    Форма НЕ работает в почтовых программах The BAT! и MS Outlook (кроме версии 2003+)!
    Чтобы отправить вопрос, откройте это письмо в браузере или зайдите на сайт RusFAQ.ru.

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

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

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

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

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


    © 2001-2008, Портал RusFAQ.ru, Россия, Москва.
    Авторское право: ООО "Мастер-Эксперт Про"
    Техподдержка портала, тел.: +7 (926) 535-23-31
    Хостинг: "Московский хостер"
    Поддержка: "Московский дизайнер"
    Авторские права | Реклама на портале

    ∙ Версия системы: 5.9 от 29.10.2008

    Яндекс Rambler's Top100
    RusFAQ.ru | MosHoster.ru | MosDesigner.ru
    RusIRC.ru | Kalashnikoff.ru | RadioLeader.ru

    В избранное