2014 dxdy logo

Научный форум dxdy

Математика, Физика, Computer Science, Machine Learning, LaTeX, Механика и Техника, Химия,
Биология и Медицина, Экономика и Финансовая Математика, Гуманитарные науки




Начать новую тему Ответить на тему На страницу 1, 2, 3, 4, 5  След.
 
 Помогите решить задачку на Си
Сообщение04.12.2007, 19:50 


04/12/07
26
Задана последовательность идентификаторов, разделённых одним или несколькими пробелами, оканчивающаяся запятой сразу за последним идентификатором. Каждый идентификатор содержит не более 20 символов. Длина последовательности не более 35 идентификаторов. Найти и напечатать все идентификаторы, не содержащие цифр.

 Профиль  
                  
 
 
Сообщение04.12.2007, 20:43 
Супермодератор
Аватара пользователя


29/07/05
8248
Москва
Ну и какого рода помощь Вам нужна?

 Профиль  
                  
 
 
Сообщение05.12.2007, 07:14 


04/12/07
3
Наверное помочь реализовать это на Си :D

 Профиль  
                  
 
 
Сообщение05.12.2007, 08:57 
Экс-модератор
Аватара пользователя


23/12/05
12064
Танюшка писал(а):
Наверное помочь реализовать это на Си :D

Тогда, наверное, алгоритм уже знаете. Может расскажете? Поясните, с чем именно в реализации на С возникли трудности?

 Профиль  
                  
 
 
Сообщение05.12.2007, 09:46 
Супермодератор
Аватара пользователя


29/07/05
8248
Москва
Просто вот в чем дело: при такой постановке задачи единственное, чем участники форума могут Вам помочь - взять и просто написать здесь готовый текст программы. Но так у нас не принято, ибо Вы тогда ничему не научитесь. Так что конкретизируйте: понятен ли алгоритм (как в принципе делать), либо сложности с реализацией.

 Профиль  
                  
 
 
Сообщение05.12.2007, 16:13 


04/12/07
26
Алгоритм в принципе понятен, а вот как реализовать это всё я не знаю.
Помогите пожалуйста, очень срочно нужно :(

 Профиль  
                  
 
 
Сообщение06.12.2007, 09:44 
Заслуженный участник
Аватара пользователя


17/10/05
3709
:evil:
Ладно, не буду издеваться над принципиальным пониманием.

Разбейте задачу на части

1) отведите место под идентификаторы. Поскольку у Вас известны и размеры, и количество, память можно отвести статически, например, в виде одного массива S[35 * 21] (0..20 — первый идентификатор, 21..41 — второй, и так далее). Обратите внимание, мы отвели место и под 0 в конце строки.

2) прочитайте идентификаторы из файла. Самый простой способ — читать посимвольно.

3) напишите функцию, которая получает параметром смещение идентификатора в таблице и возвращает 0, если он содержит цифры, и 1, если не содержит

4) Ну, всё, разум победил. Идёте в цикле по таблице и вызываете предыдущую функцию. Если она вернула 1 — печатаем идентификатор, нет — пусть катится в тар-тарары.

На самом деле, нам и помнить-то их все не надо. Но программа так получается не сложнее.

 Профиль  
                  
 
 
Сообщение06.12.2007, 19:09 


04/12/07
26
незваный гость писал(а):
Ладно, не буду издеваться над принципиальным пониманием.

Разбейте задачу на части

1) отведите место под идентификаторы. Поскольку у Вас известны и размеры, и количество, память можно отвести статически, например, в виде одного массива S[35 * 21] (0..20 — первый идентификатор, 21..41 — второй, и так далее). Обратите внимание, мы отвели место и под 0 в конце строки.

2) прочитайте идентификаторы из файла. Самый простой способ — читать посимвольно.

3) напишите функцию, которая получает параметром смещение идентификатора в таблице и возвращает 0, если он содержит цифры, и 1, если не содержит

4) Ну, всё, разум победил. Идёте в цикле по таблице и вызываете предыдущую функцию. Если она вернула 1 — печатаем идентификатор, нет — пусть катится в тар-тарары.

На самом деле, нам и помнить-то их все не надо. Но программа так получается не сложнее.


А не подскажете как функцию написать? :)

 Профиль  
                  
 
 
Сообщение07.12.2007, 00:34 
Заслуженный участник
Аватара пользователя


17/10/05
3709
:evil:
На такой вопрос я даже не знаю, что ответить. Чтобы не впадать в сарказм и в маразм, давайте уточним, что Вам не понятно:

1) синтаксис функции в С

или

2) алгорифм работы функции, проверяющей есть ли в идентификаторе цифра

или

3) как оформить параметр такой функции

или

4) синтаксис вызова функции.

или

5) где найти введение в язык С

 Профиль  
                  
 
 
Сообщение07.12.2007, 09:56 
Супермодератор
Аватара пользователя


29/07/05
8248
Москва
Мне кажется, что здесь может быть проще отвести место в памяти только под один идентификатор и принимать решение сразу после его прочтения. Без дополнительных функцией, на одних только циклах. Алгоритм примерно таков:

1. Сбросить флаг того, что идентификатор содержит цифру.
2. Считывать символы в буфер до появления запятой или пробела. Одновременно проверять, цифра это или нет. При появлении цифры установить флаг.
3. Проверить флаг наличия цифры. Если он не установлен, то добавить в конец буфера завершающий нуль-символ и вывести идентификатор на печать.
4. Если пункт 2. закончился запятой, то завершение работы.
5. Считывать пробелы до появления первого не-пробела. Поместить его в начало буфера и перейти к шагу 1.

При этом условие того, что идентификаторов в списке не больше 35, не нужно.

 Профиль  
                  
 
 
Сообщение07.12.2007, 15:16 


04/12/07
26
незваный гость писал(а):
:evil:
На такой вопрос я даже не знаю, что ответить. Чтобы не впадать в сарказм и в маразм, давайте уточним, что Вам не понятно:

1) синтаксис функции в С

или

2) алгорифм работы функции, проверяющей есть ли в идентификаторе цифра

или

3) как оформить параметр такой функции

или

4) синтаксис вызова функции.

или

5) где найти введение в язык С


Я вообще не представляю как такую функцию написать :cry: Хотя бы примерно можете показать?

 Профиль  
                  
 
 
Сообщение07.12.2007, 15:23 
Супермодератор
Аватара пользователя


29/07/05
8248
Москва
А Вы хотя бы одну программу на Си писали?

 Профиль  
                  
 
 
Сообщение07.12.2007, 15:35 


04/12/07
26
Писала, всего лишь две программы, там были только функции main, printf и skanf, но эти программы были совсем простые

 Профиль  
                  
 
 
Сообщение07.12.2007, 15:59 
Супермодератор
Аватара пользователя


29/07/05
8248
Москва
Ну, например, если следовать плану незваного гостя, то функция может выглядеть так (во всяком случае, я бы написал ее так):

Код:
bool DigitExists(char *szString)
{
    while( *szString != '\0' )
    {
        if( *szString >= '0' && *szString <= '9' )
            return true;
        szString++;
    }

    return false;
}


Предполагается, что на вход подается корректная строка, заканчивающаяся нуль-символом.

Понятно? Дальше - самостоятельно, или задавайте более конкретные наводящие вопросы.

 Профиль  
                  
 
 
Сообщение07.12.2007, 16:12 


04/12/07
26
А можно написать как-нибудь по другому? Без типа данных bool?

 Профиль  
                  
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 61 ]  На страницу 1, 2, 3, 4, 5  След.

Модераторы: Karan, Toucan, PAV, maxal, Супермодераторы



Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group