2014 dxdy logo

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

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




На страницу 1, 2, 3, 4, 5  След.
 
 Помогите решить задачку на Си
Сообщение04.12.2007, 19:50 
Задана последовательность идентификаторов, разделённых одним или несколькими пробелами, оканчивающаяся запятой сразу за последним идентификатором. Каждый идентификатор содержит не более 20 символов. Длина последовательности не более 35 идентификаторов. Найти и напечатать все идентификаторы, не содержащие цифр.

 
 
 
 
Сообщение04.12.2007, 20:43 
Аватара пользователя
Ну и какого рода помощь Вам нужна?

 
 
 
 
Сообщение05.12.2007, 07:14 
Наверное помочь реализовать это на Си :D

 
 
 
 
Сообщение05.12.2007, 08:57 
Аватара пользователя
Танюшка писал(а):
Наверное помочь реализовать это на Си :D

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

 
 
 
 
Сообщение05.12.2007, 09:46 
Аватара пользователя
Просто вот в чем дело: при такой постановке задачи единственное, чем участники форума могут Вам помочь - взять и просто написать здесь готовый текст программы. Но так у нас не принято, ибо Вы тогда ничему не научитесь. Так что конкретизируйте: понятен ли алгоритм (как в принципе делать), либо сложности с реализацией.

 
 
 
 
Сообщение05.12.2007, 16:13 
Алгоритм в принципе понятен, а вот как реализовать это всё я не знаю.
Помогите пожалуйста, очень срочно нужно :(

 
 
 
 
Сообщение06.12.2007, 09:44 
Аватара пользователя
:evil:
Ладно, не буду издеваться над принципиальным пониманием.

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

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

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

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

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

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

 
 
 
 
Сообщение06.12.2007, 19:09 
незваный гость писал(а):
Ладно, не буду издеваться над принципиальным пониманием.

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

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

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

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

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

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


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

 
 
 
 
Сообщение07.12.2007, 00:34 
Аватара пользователя
:evil:
На такой вопрос я даже не знаю, что ответить. Чтобы не впадать в сарказм и в маразм, давайте уточним, что Вам не понятно:

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

или

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

или

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

или

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

или

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

 
 
 
 
Сообщение07.12.2007, 09:56 
Аватара пользователя
Мне кажется, что здесь может быть проще отвести место в памяти только под один идентификатор и принимать решение сразу после его прочтения. Без дополнительных функцией, на одних только циклах. Алгоритм примерно таков:

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

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

 
 
 
 
Сообщение07.12.2007, 15:16 
незваный гость писал(а):
:evil:
На такой вопрос я даже не знаю, что ответить. Чтобы не впадать в сарказм и в маразм, давайте уточним, что Вам не понятно:

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

или

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

или

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

или

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

или

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


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

 
 
 
 
Сообщение07.12.2007, 15:23 
Аватара пользователя
А Вы хотя бы одну программу на Си писали?

 
 
 
 
Сообщение07.12.2007, 15:35 
Писала, всего лишь две программы, там были только функции main, printf и skanf, но эти программы были совсем простые

 
 
 
 
Сообщение07.12.2007, 15:59 
Аватара пользователя
Ну, например, если следовать плану незваного гостя, то функция может выглядеть так (во всяком случае, я бы написал ее так):

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

    return false;
}


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

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

 
 
 
 
Сообщение07.12.2007, 16:12 
А можно написать как-нибудь по другому? Без типа данных bool?

 
 
 [ Сообщений: 61 ]  На страницу 1, 2, 3, 4, 5  След.


Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group