Модераторы: Poseidon

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> [C] Выравнивание текста, по правому краю 
V
    Опции темы
anad
Дата 29.11.2006, 21:39 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 62
Регистрация: 30.3.2006

Репутация: нет
Всего: нет



Программа, выравнивающая текст по правому краю, т.е. равномерно размещающая по строке пробелы между словами так, чтобы длина каждой строки стала=n.
(Если можно с пояснениями)
PM MAIL   Вверх
Kuvaldis
Дата 29.11.2006, 22:05 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


механик-вредитель
***


Профиль
Группа: Участник Клуба
Сообщений: 1189
Регистрация: 16.6.2006
Где: Минск

Репутация: 32
Всего: 61



anad
когда-то писал для своего варианта блокнота. Учитывается, строка является красной или нет. При анализе кода можно идею подсмотреть и переделать более простой вариант (мне лень)
left и right - это максимальное левое и правое значение 
Код

// insert extra gaps to get width-str
// count - words kol, is_red - if red_line

int get_width(char* str, int count, int is_red)

{
    int    gapkol = 0;  // gaps count
    int    i, j, k;     // cycle variables
    int    n;           // real str length
    int    step;        // gaps count to add to each gap_group
    int    tail = 0;    // step += tail
    int    ost;         // gapskol % count
    int    len = right - left + 1; // formatted str length
    char*  res = NULL;  // result str

    n = strlen(str);
    if((count == 1) && (str[0] != ' '))  // if only one word and no leading gaps
    {
      for(i = n; i < len; i++)           // fill following spaces with gaps
         str[i] = ' ';
      return 1;
    }

    if(!(res = (char*)calloc(len + 2, sizeof(char))))
    {
      puts("Error: not enough memory");
      return 0;
    }
    gapkol = len - n;   // following gaps count
    count--;            // count of gaps groups
    i = j = 0;

    if(is_red)
      for(i = 0, j = 0; i < red; i++, j++)      // leading gaps  - parafraph
       res[j] = str[i];

    if(gap == TRUE)                             // if +- 1 gap difference
    {
      for(k = i; k <= n; k++)                   // calculate all gaps in str
         if(str[k] == ' ')
           gapkol++;
    }
    else
    // else calculate following gaps in str 
      for(k = n - 1; (k >= 0) && (str[k] == ' '); k--)
         gapkol++;

    if(gapkol == 0)  // if no gaps
    {
      free(res);                          // exit function
      return 1;
    }
    if(count == 0)                        // if only one word
    {
       while((i < n) && (str[i] != ' '))  // copy word in res
          res[j++] = str[i++];
       for(i = 0; i < gapkol; i++)        //add gaps into str end
          res[j++] = ' ';
       strcpy(str, res);                  // restore str
       free(res);
       return 1;
    }
    
    step = gapkol / count;                // gaps count to add to each gap_group
    ost = gapkol % count;                 // divide ostatok
    if(ost)
      tail = 1;
    for(count; count > 0; count--)        // for each gap_group
    {
       while(str[i] != ' ')               // copy word
          res[j++] = str[i++];
       while(str[i] == ' ')               // following gaps
       {
          if(gap == FALSE)                // if not +- 1 gap difference
            res[j++] = str[i];            //    copy old gaps after word
          i++;
       }
       for(int i = 0; i < step + tail; i++) // add new gaps after word
          res[j++] = ' ';
       ost--;
       if(!ost)                           // if all ostatok is written
         tail = 0;
    }

    while(str[i] && (str[i] != ' '))      // copy last word
       res[j++] = str[i++];

    strcpy(str, res);                     // restore str
    free(res);

    return 1;
}




--------------------
Помни - когда ты спишь, враг не дремлет
Спи чаще и дольше, изматывай врага бессоницей
PM MAIL ICQ   Вверх
anad
Дата 29.11.2006, 22:50 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 62
Регистрация: 30.3.2006

Репутация: нет
Всего: нет



Программа не идет.
 А что нибудь полегче. Мне с такой в жизни не разобраться.
PM MAIL   Вверх
anad
Дата 30.11.2006, 17:16 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 62
Регистрация: 30.3.2006

Репутация: нет
Всего: нет



Никто не знает как написать прогу?
PM MAIL   Вверх
Solomon
Дата 30.11.2006, 18:09 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 471
Регистрация: 23.1.2006
Где: Украина Киев

Репутация: 2
Всего: 2



Мне кстати тож интересует эта тема, так что тож жду ответа с нетерпением
еще небольшое дополнение... А как насчет варианта если длинна cлова >n(т.е. длинны строки)


--------------------
Если не идти до конца к поставленным целям и не пытатся их достигнуть, каким бы тяжелым не казался путь, то лучше и не ставь их перед собой, но тот кто не ставит перед собой труднодоступные цели, никогда не ощутит эйфорию настоящей победы... победы над миром...
Соломон 2008
PM MAIL ICQ GTalk YIM   Вверх
Dov
Дата 30.11.2006, 20:08 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


аСинизатор
***


Профиль
Группа: Завсегдатай
Сообщений: 1721
Регистрация: 10.5.2003
Где: Эрец-Исраэль

Репутация: 50
Всего: 88



Цитата(anad @  29.11.2006,  20:39 Найти цитируемый пост)
Программа, выравнивающая текст по правому краю, т.е. равномерно размещающая по строке пробелы между словами так, чтобы длина каждой строки стала=n.

Не понял задание,  smile  пример приведите.  smile 



--------------------
Тут вечности запах томительный,
И свежие фрукты дешевые, 
А климат у нас – изумительный, 
И только соседи – #уевые. 
                           Игорь Губерман.
PM   Вверх
Solomon
Дата 30.11.2006, 20:13 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 471
Регистрация: 23.1.2006
Где: Украина Киев

Репутация: 2
Всего: 2



В ворде работал? знаеш там есть такая функция как выравнивание по ширине...? это что в этом роде, если я правильно понял )))


--------------------
Если не идти до конца к поставленным целям и не пытатся их достигнуть, каким бы тяжелым не казался путь, то лучше и не ставь их перед собой, но тот кто не ставит перед собой труднодоступные цели, никогда не ощутит эйфорию настоящей победы... победы над миром...
Соломон 2008
PM MAIL ICQ GTalk YIM   Вверх
Dov
Дата 30.11.2006, 20:21 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


аСинизатор
***


Профиль
Группа: Завсегдатай
Сообщений: 1721
Регистрация: 10.5.2003
Где: Эрец-Исраэль

Репутация: 50
Всего: 88



Цитата(Solomon @  30.11.2006,  19:13 Найти цитируемый пост)
если я правильно понял )))

А если неправильно. smile 


--------------------
Тут вечности запах томительный,
И свежие фрукты дешевые, 
А климат у нас – изумительный, 
И только соседи – #уевые. 
                           Игорь Губерман.
PM   Вверх
Solomon
Дата 30.11.2006, 20:27 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 471
Регистрация: 23.1.2006
Где: Украина Киев

Репутация: 2
Всего: 2



Цитата

 т.е. равномерно размещающая по строке пробелы между словами так, чтобы длина каждой строки стала=n.


ну полюбому то...

только помоему это называется не "выравнивание по правому краю"... вот именно из за этого я сказал что неуверен...
но скорее всего он именно здесь ошибся


--------------------
Если не идти до конца к поставленным целям и не пытатся их достигнуть, каким бы тяжелым не казался путь, то лучше и не ставь их перед собой, но тот кто не ставит перед собой труднодоступные цели, никогда не ощутит эйфорию настоящей победы... победы над миром...
Соломон 2008
PM MAIL ICQ GTalk YIM   Вверх
Dov
Дата 30.11.2006, 20:33 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


аСинизатор
***


Профиль
Группа: Завсегдатай
Сообщений: 1721
Регистрация: 10.5.2003
Где: Эрец-Исраэль

Репутация: 50
Всего: 88



Ладно, Solomon, подождём anad, она нам всё объяснит.  smile 
Цитата(Solomon @  30.11.2006,  17:09 Найти цитируемый пост)
Мне кстати тож интересует эта тема, так что тож жду ответа с нетерпением

А тебя-то что интересует, только конкретно.



--------------------
Тут вечности запах томительный,
И свежие фрукты дешевые, 
А климат у нас – изумительный, 
И только соседи – #уевые. 
                           Игорь Губерман.
PM   Вверх
ivashkanet
Дата 30.11.2006, 20:40 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Кодю потиху
****


Профиль
Группа: Участник Клуба
Сообщений: 3684
Регистрация: 23.2.2006
Где: Гомель, Беларусь

Репутация: 9
Всего: 149



А меня интересует вы сами будете рисовать на листе, или расстояния между словами измеряются только количеством пробелов в них?
Если первое, то алгоритм таков: 
1) находим первое слово, которое не помещается в строку.
Для этого нам нужно знать ширину каждой буквы и минимальную ширину пробела.
Складываем последовательно ширину всех букв, включая пробелы и проверяем вышли ли мы за пределы строки.
2) слово на котором вышли отбрасываем и вычисляем длину всех букв в неоткинутых словах (пробелы не считаются).
3) вычисляем разность между длинной строки и числом из п. 2 и делим его поровну между всеми пробелами.
4) выводим строку с шириной пробела вычисленной в пред. пункте.
Все.
Цитата(Solomon @  30.11.2006,  17:09 Найти цитируемый пост)
А как насчет варианта если длинна cлова >n(т.е. длинны строки) 

Ничего страшного. Просто обрезаем слово по первой букве, которая не влезла в строку
А вот если воторое:
То ничего у вас не выйдет  smile 
Количество букв в слове в среднем 10. Поэтому в среднем у нас будет отсекаться 5 букв. именно их ширину и нужно будет распределять между пробелами !равномерно! 
Но как можно это сделать, если мы можем добавить не менее одного пробела к другому. 
Т.е.хоть у нас и будет выравнивание по ширине, но будет оно корявое. Где-то 1, где-то 2 пробела между словами, что будет бросаться в глаза

Это сообщение отредактировал(а) ivashkanet - 30.11.2006, 20:41
PM MAIL WWW ICQ   Вверх
Dov
Дата 30.11.2006, 20:53 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


аСинизатор
***


Профиль
Группа: Завсегдатай
Сообщений: 1721
Регистрация: 10.5.2003
Где: Эрец-Исраэль

Репутация: 50
Всего: 88



ivashkanet, по-моему, ты только всё усложнил. Какой лист, какое рисование? Чёрный экран, белые буквы, всё.


--------------------
Тут вечности запах томительный,
И свежие фрукты дешевые, 
А климат у нас – изумительный, 
И только соседи – #уевые. 
                           Игорь Губерман.
PM   Вверх
ivashkanet
Дата 30.11.2006, 20:56 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Кодю потиху
****


Профиль
Группа: Участник Клуба
Сообщений: 3684
Регистрация: 23.2.2006
Где: Гомель, Беларусь

Репутация: 9
Всего: 149



Dov, тогда читай второй вариант
PM MAIL WWW ICQ   Вверх
Solomon
Дата 30.11.2006, 21:01 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 471
Регистрация: 23.1.2006
Где: Украина Киев

Репутация: 2
Всего: 2



Цитата(Dov @  30.11.2006,  19:33 Найти цитируемый пост)
А тебя-то что интересует, только конкретно.


конкретно мне надо реализовать культкрное выранивание по ширине, как это еесть в ворде


Цитата

Т.е.хоть у нас и будет выравнивание по ширине, но будет оно корявое. Где-то 1, где-то 2 пробела между словами, что будет бросаться в глаза

ivashkanet, извени а ворде что нетак это сделано??? и помоему на это никто не жаловалня... намно приятствение смотрится чем когда одна строка заполнина на половину одна на три\четвертых и так далее...  



--------------------
Если не идти до конца к поставленным целям и не пытатся их достигнуть, каким бы тяжелым не казался путь, то лучше и не ставь их перед собой, но тот кто не ставит перед собой труднодоступные цели, никогда не ощутит эйфорию настоящей победы... победы над миром...
Соломон 2008
PM MAIL ICQ GTalk YIM   Вверх
Dov
Дата 30.11.2006, 21:03 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


аСинизатор
***


Профиль
Группа: Завсегдатай
Сообщений: 1721
Регистрация: 10.5.2003
Где: Эрец-Исраэль

Репутация: 50
Всего: 88



Короче, без anad, не разберёмся.  smile 


Это сообщение отредактировал(а) Dov - 30.11.2006, 21:04


--------------------
Тут вечности запах томительный,
И свежие фрукты дешевые, 
А климат у нас – изумительный, 
И только соседи – #уевые. 
                           Игорь Губерман.
PM   Вверх
ivashkanet
Дата 30.11.2006, 21:07 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Кодю потиху
****


Профиль
Группа: Участник Клуба
Сообщений: 3684
Регистрация: 23.2.2006
Где: Гомель, Беларусь

Репутация: 9
Всего: 149



Если я заключу слово лист в кавычки станет легче?
слово лист читать как "лист"
PM MAIL WWW ICQ   Вверх
Solomon
Дата 30.11.2006, 21:11 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 471
Регистрация: 23.1.2006
Где: Украина Киев

Репутация: 2
Всего: 2



Это ты сейчас о чем? при чем тут кавычки??  smile

Добавлено @ 21:13 
Кстати да... рисовать мы будем на листе(т.е. выводить текст с помощью OpenGL), поэтому впринципе можно делать одинаковые пробелы  smile 


--------------------
Если не идти до конца к поставленным целям и не пытатся их достигнуть, каким бы тяжелым не казался путь, то лучше и не ставь их перед собой, но тот кто не ставит перед собой труднодоступные цели, никогда не ощутит эйфорию настоящей победы... победы над миром...
Соломон 2008
PM MAIL ICQ GTalk YIM   Вверх
ivashkanet
Дата 30.11.2006, 21:14 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Кодю потиху
****


Профиль
Группа: Участник Клуба
Сообщений: 3684
Регистрация: 23.2.2006
Где: Гомель, Беларусь

Репутация: 9
Всего: 149



Цитата(Solomon @  30.11.2006,  20:01 Найти цитируемый пост)
ivashkanet, извени а ворде что нетак это сделано??? и помоему на это никто не жаловалня... намно приятствение смотрится чем когда одна строка заполнина на половину одна на три\четвертых и так далее...  

Ворд сам  smile рисует буквы на "листе". Он играет шириной пробелов, чтобы получился хороший результат.

По поводу второго варианта:
Если ширина пробела не сильно большая например половина стандартной буквы, то ситуация нормализуется и можно идти почти по первому пути. 
Почти означает, что хоть мы и не можем играть шириной побела, но его ширина мала, что мы можем пренебречь тем, что в одном месте у нас будет 3 пробела вместо двух
Цитата(Solomon @  30.11.2006,  20:01 Найти цитируемый пост)

конкретно мне надо реализовать культкрное выранивание по ширине, как это еесть в ворде

Меня интересует где???? В консоле, в лабеле на форме?
(хотя между этими вариантами особо разницы нет. Разве в ширине пробела)
PM MAIL WWW ICQ   Вверх
Dov
Дата 30.11.2006, 21:17 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


аСинизатор
***


Профиль
Группа: Завсегдатай
Сообщений: 1721
Регистрация: 10.5.2003
Где: Эрец-Исраэль

Репутация: 50
Всего: 88



Solomon, а где это в ворде, не нашёл я.


--------------------
Тут вечности запах томительный,
И свежие фрукты дешевые, 
А климат у нас – изумительный, 
И только соседи – #уевые. 
                           Игорь Губерман.
PM   Вверх
Solomon
Дата 30.11.2006, 21:20 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 471
Регистрация: 23.1.2006
Где: Украина Киев

Репутация: 2
Всего: 2



Dov,  smile это по умолчанию помоему не ставится ))

Добавлено @ 21:22 
ivashkanet, в окне... координаты впринципе сам могу задать  smile 


--------------------
Если не идти до конца к поставленным целям и не пытатся их достигнуть, каким бы тяжелым не казался путь, то лучше и не ставь их перед собой, но тот кто не ставит перед собой труднодоступные цели, никогда не ощутит эйфорию настоящей победы... победы над миром...
Соломон 2008
PM MAIL ICQ GTalk YIM   Вверх
Dov
Дата 30.11.2006, 21:25 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


аСинизатор
***


Профиль
Группа: Завсегдатай
Сообщений: 1721
Регистрация: 10.5.2003
Где: Эрец-Исраэль

Репутация: 50
Всего: 88



Цитата(Solomon @  30.11.2006,  20:20 Найти цитируемый пост)
Dov,   это по умолчанию помоему не ставится ))

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



--------------------
Тут вечности запах томительный,
И свежие фрукты дешевые, 
А климат у нас – изумительный, 
И только соседи – #уевые. 
                           Игорь Губерман.
PM   Вверх
Solomon
Дата 30.11.2006, 21:27 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 471
Регистрация: 23.1.2006
Где: Украина Киев

Репутация: 2
Всего: 2



т.е. допустим 

не...
Цитата

ля ля ляля ялляляля
роелпреолп лдпк кол лк
лплдк колдк жкл лклк кдкд 
кл кделк  декедк
елкде лкделкделк дел

а 
Цитата

ля     ля     ляля     ялляляля
роелпреолп  лдпк  кол   лк
лплдк колдк жкл лклк кдкд 
кл          кделк         декедк
елкде     лкделкделк    дел


Добавлено @ 21:28 
блин.. тут нехотит нормально выравнивать  smile 


--------------------
Если не идти до конца к поставленным целям и не пытатся их достигнуть, каким бы тяжелым не казался путь, то лучше и не ставь их перед собой, но тот кто не ставит перед собой труднодоступные цели, никогда не ощутит эйфорию настоящей победы... победы над миром...
Соломон 2008
PM MAIL ICQ GTalk YIM   Вверх
ivashkanet
Дата 30.11.2006, 21:28 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Кодю потиху
****


Профиль
Группа: Участник Клуба
Сообщений: 3684
Регистрация: 23.2.2006
Где: Гомель, Беларусь

Репутация: 9
Всего: 149



Dov, тебе же сказали: 
Цитата(Solomon @  30.11.2006,  20:11 Найти цитируемый пост)

Кстати да... рисовать мы будем на листе(т.е. выводить текст с помощью OpenGL), поэтому впринципе можно делать одинаковые пробелы  smile  


PM MAIL WWW ICQ   Вверх
Solomon
Дата 30.11.2006, 21:28 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 471
Регистрация: 23.1.2006
Где: Украина Киев

Репутация: 2
Всего: 2



ща попробую нормально сделать

Добавлено @ 21:30 
короче здесь такое не получается а файл впадлу приклеплять... короче ширина строк должна быть равна... ну чего тут непонятного?  smile  

Это сообщение отредактировал(а) Solomon - 30.11.2006, 21:38

Присоединённый файл ( Кол-во скачиваний: 9 )
Присоединённый файл  a.txt 0,28 Kb


--------------------
Если не идти до конца к поставленным целям и не пытатся их достигнуть, каким бы тяжелым не казался путь, то лучше и не ставь их перед собой, но тот кто не ставит перед собой труднодоступные цели, никогда не ощутит эйфорию настоящей победы... победы над миром...
Соломон 2008
PM MAIL ICQ GTalk YIM   Вверх
Dov
Дата 30.11.2006, 21:33 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


аСинизатор
***


Профиль
Группа: Завсегдатай
Сообщений: 1721
Регистрация: 10.5.2003
Где: Эрец-Исраэль

Репутация: 50
Всего: 88



Solomon, используй теги  code , тогда получится.



--------------------
Тут вечности запах томительный,
И свежие фрукты дешевые, 
А климат у нас – изумительный, 
И только соседи – #уевые. 
                           Игорь Губерман.
PM   Вверх
Solomon
Дата 30.11.2006, 21:41 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 471
Регистрация: 23.1.2006
Где: Украина Киев

Репутация: 2
Всего: 2



Dov, глянь там я свое сообщение выше файл прикрепил

Добавлено @ 21:52 
Все ушол в lineage, вернусь нескоро  smile 


--------------------
Если не идти до конца к поставленным целям и не пытатся их достигнуть, каким бы тяжелым не казался путь, то лучше и не ставь их перед собой, но тот кто не ставит перед собой труднодоступные цели, никогда не ощутит эйфорию настоящей победы... победы над миром...
Соломон 2008
PM MAIL ICQ GTalk YIM   Вверх
anad
Дата 30.11.2006, 22:00 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 62
Регистрация: 30.3.2006

Репутация: нет
Всего: нет



Мне доли такое задание и ничего не объясняли. Я думаю, что надо просто выровнять по правому краю и строки сделать одинаковой длины. Но не понятно с пробелами... Может расстояние между словами должно быть одинаковое, а если что-то не убирается, то переносится на другую строку. Как в Word например.
PM MAIL   Вверх
Solomon
Дата 30.11.2006, 22:03 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 471
Регистрация: 23.1.2006
Где: Украина Киев

Репутация: 2
Всего: 2



пришол добрый человек и помоему еще больше загнал в недоумение  smile 
я уже и сам все меньше и меньше понимаю, что собственно надо сделать smile

Добавлено @ 22:05 
anad, от тебя плиз уточнения... в чем тебе это надобно сделать? в консоле, в виндовз окне? где?


--------------------
Если не идти до конца к поставленным целям и не пытатся их достигнуть, каким бы тяжелым не казался путь, то лучше и не ставь их перед собой, но тот кто не ставит перед собой труднодоступные цели, никогда не ощутит эйфорию настоящей победы... победы над миром...
Соломон 2008
PM MAIL ICQ GTalk YIM   Вверх
anad
Дата 30.11.2006, 22:08 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 62
Регистрация: 30.3.2006

Репутация: нет
Всего: нет



Я учусь в универе. Мы работаем в Visual Studio. Net 2003г. Мне надо что бы там и шла программа на языке Си. Нам плохо все объясняют. Это задание по курсовой.
PM MAIL   Вверх
anad
Дата 30.11.2006, 22:24 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 62
Регистрация: 30.3.2006

Репутация: нет
Всего: нет



Нам говорили вот такой алгоритм, но не знаю подходит ли он для решения этой задачи:
отводится память под массив указателей, совпадающих со строкой; отводится память под вспомогательный буфер, который способен вмещать строку самого максимального размера; в цикле: ввод строк построчно в вспомогательный буфер. После ввода каждой строки вызывается функция (вроде strdab), которая создает дубликат строки в операторе памяти. Возвращаемая функция и указатель помещаются в массив указателя на строки... 
Что-то такое.
PM MAIL   Вверх
ivashkanet
Дата 30.11.2006, 22:30 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Кодю потиху
****


Профиль
Группа: Участник Клуба
Сообщений: 3684
Регистрация: 23.2.2006
Где: Гомель, Беларусь

Репутация: 9
Всего: 149



Значится так:
Предпосылки такие:
  •  Знаем ширину любой буквы шрифта.
  •  Пробелы имеют фиксированную длину.

Метод упорядочивания текста:
[*]Расставление доп. пробелов между словами
Алгоритм:
1) Находим первое слово, которое не помещается в строку.
Для этого нам нужно знать ширину каждой буквы и минимальную ширину пробела.
Складываем последовательно ширину всех букв, включая пробелы и проверяем вышли ли мы за пределы строки.
2) Слово на котором вышли отбрасываем и вычисляем длину всех букв в неоткинутых словах (пробелы не считаются).
3) Вычисляем разность между длинной строки и числом из п. 2. 
4) Определяем сколько пробелов нужно для выравнивания текста.
5) Вычисляем сколько пробелов будет между конкретными словами (распределяем так, чтобы всем было поровну +-1 пробел)
5) Выводим строку с количеством пробелов вычисленном в пред. пункте.

P.S. Если не разберетесь --- спрашивайте. Я сделаю это не раньше понедельника (работы очень много). Максимум на C#
PM MAIL WWW ICQ   Вверх
anad
Дата 30.11.2006, 22:37 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 62
Регистрация: 30.3.2006

Репутация: нет
Всего: нет



Да, ну и задачка...
PM MAIL   Вверх
anad
Дата 30.11.2006, 23:17 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 62
Регистрация: 30.3.2006

Репутация: нет
Всего: нет



Буду ждать.
PM MAIL   Вверх
Kuvaldis
Дата 30.11.2006, 23:56 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


механик-вредитель
***


Профиль
Группа: Участник Клуба
Сообщений: 1189
Регистрация: 16.6.2006
Где: Минск

Репутация: 32
Всего: 61



anad
Надо хотеть что-либо сделать и приложить хоть какие-то усилия. Вот я за 10 минут упростил свой вариант, который привел во втором посте этой темы
Код

//-------------------------------------------------------------------
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <ctype.h>
//-------------------------------------------------------------------
#define LEN 60  // max string length
//-------------------------------------------------------------------
int get_width(char* str, int count);
int get_words_count(char* str);
//-------------------------------------------------------------------
int main(void) 
{    
    char str[LEN] = {0};
    int  n;

    puts("Input str len");
    scanf("%d", &n);
    fflush(stdin);
    puts("Input str");
    fgets(str, LEN, stdin);
    str [ strlen(str) - 1 ] = '\0';

    if (get_width(str, n))
    {
        puts("After chiki-puki");
        for (int i = 1; i <= LEN; i++)
        {
            printf("%d", i % 10);
        }
        puts("");
        puts(str);
    }
    system("pause");
    return 0;    
}
//-------------------------------------------------------------------
// insert extra gaps to get width-str
// size - string max size

int get_width(char* str, int len)

{
    int    gapkol = 0;  // gaps count
    int    i, j, k;     // cycle variables
    int    n;           // real str length
    int    step;        // gaps count to add to each gap_group
    int    tail = 0;    // step += tail
    int    ost;         // gapskol % count    
    char*  res = NULL;  // result str
    int    count;        // words count in string
    
    count = get_words_count(str);
    n = strlen(str);
    if ((count == 1) && (str[0] != ' '))  // if only one word and no leading gaps
    {
      for(i = n; i < len; i++)           // fill following spaces with gaps
         str[i] = ' ';
      return 1;
    }

    if(!(res = (char*) calloc(len + 1, sizeof(char))))
    {
       puts("Error: not enough memory");
       return 0;
    }
    gapkol = len - n;   // following gaps count
    count--;            // count of gaps groups
   

    for (k = 0; k <= n; k++)                   // calculate all gaps in str
    {
      if(str[k] == ' ')
         gapkol++;
    }


    if (gapkol == 0)  // if no gaps (all string is letters)
    {
       free(res);                          // exit function
       return 1;
    }

    i = j = 0;

    if (count == 0)                       // if only one word
    {
       while ((i < n) && (str[i] != ' '))  // copy word in res
          res[j++] = str[i++];
       for (i = 0; i < gapkol; i++)        //add gaps into str end
          res[j++] = ' ';
       strcpy(str, res);                  // restore str
       str[len - 1] = '\0';
       free(res);
       return 1;
    }

    while (str[i] == ' ')              // get first word start
           i++;

    step = gapkol / count;                // gaps count to add to each gap_group
    ost = gapkol % count;                 // divide ostatok

    if (ost)
      tail = 1;
    for (count; count > 0; count--)        // for each gap_group
    {
       while (str[i] != ' ')              // copy word
          res[j++] = str[i++];
     
       while (str[i] == ' ')              // miss following gaps
           i++;
       
       for (int i = 0; i < step + tail; i++) // add new gaps after word
          res[j++] = ' ';
       ost--;
       if(!ost)                           // if all ostatok is written
         tail = 0;
    }

    while (str[i] && (str[i] != ' '))     // copy last word
       res[j++] = str[i++];

    res[j] = '\0';
    strcpy(str, res);                     // restore str
    free(res);
    
    return 1;
}
//-------------------------------------------------------------------
int get_words_count(char* str)
{
    int n;
    int found = 0;
    int count = 0;

    n = strlen(str);
    for (int i = 0; str[i]; i++)
    {
        if (!isspace(str[i])) 
        {
            if (!found)
            {
               found = 1;// вошли в слово, до этого были пробелы
               count++;
            }
        }
        else 
            found = 0;        
    }    

    return count;
}
//-------------------------------------------------------------------





--------------------
Помни - когда ты спишь, враг не дремлет
Спи чаще и дольше, изматывай врага бессоницей
PM MAIL ICQ   Вверх
anad
Дата 1.12.2006, 00:35 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 62
Регистрация: 30.3.2006

Репутация: нет
Всего: нет



Я знаю, что здесь работают умные люди, спасибо!

Эта программа выравнивает текст по правому краю? А можно пояснения на русском языке?
А указатели не надо использовать?
PM MAIL   Вверх
Kuvaldis
Дата 1.12.2006, 00:49 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


механик-вредитель
***


Профиль
Группа: Участник Клуба
Сообщений: 1189
Регистрация: 16.6.2006
Где: Минск

Репутация: 32
Всего: 61



anad
Цитата

Эта программа выравнивает текст по правому краю?

Нужно запустить и убедиться.. (выравнивает)

Цитата

А указатели не надо использовать?

Строка - это уже указатель. ТУт в одном месте используется динамическая память.
Цитата

А можно пояснения на русском языке?

ИМХО, в данной программе комменты и на английском очень информативны (лень мне переписывать).

Суммируя вышесказанное, хочу сказать: сначала посмотри, что тебе предложили. И попытайся разобраться. И задавай вопросы по существу.  Приятней общаться с человеком (даже если это и девушка), которого интересует не только результат. smile 


--------------------
Помни - когда ты спишь, враг не дремлет
Спи чаще и дольше, изматывай врага бессоницей
PM MAIL ICQ   Вверх
anad
Дата 1.12.2006, 01:40 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 62
Регистрация: 30.3.2006

Репутация: нет
Всего: нет



Что означает?
Код

int    tail = 0;

Эти строки не понятны:
Код

if(!(res = (char*) calloc(len + 1, sizeof(char))))


Код

if(str[k] == ' ')


Что такое i и j и почему равны нулю в 84 строке.
И еще не понятна строка 140.


PM MAIL   Вверх
Kuvaldis
Дата 1.12.2006, 02:16 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


механик-вредитель
***


Профиль
Группа: Участник Клуба
Сообщений: 1189
Регистрация: 16.6.2006
Где: Минск

Репутация: 32
Всего: 61



anad
Идея алгоритма:
1. Получаем на вход строку
2. Считаем количество слов count в этой строке.
3. считаем количество необходимых пробелов в строке. Оно равно gapkol = максимальная длина строки - длина входной строки - количество проблелов во введенной строке.
Данные пробелы нужно равномерно (!) распределить между словами. Если слов К шт., то количество групп пробелов между словами = К - 1.
Между словами должно быть по возможности одинаковое кол-во пробелов. Разделим
step = gapkol / count;               
ost = gapkol % count;     

strep - это количетство пробелов, которое всегда будет записываться.
ost - будет меняться, это остаток от деления gapcol на количество слов.

Например, у нас 4 слов и 14 пробелов.
Тогда 
step = 14 / 4 = 3
ost = 2
Значит,  у нас будет 2 группы пробелов по (2 + 1) = 4  символа, и 2 группы по 3 символа (мы "лишние" проблелы из ost распределяем по одному в каждую группу путем прибавления "хвоста" tail к основному количеству, пока их количество не станет нулем) 
В алгоритме еще отстлеживаются ситуации, когда количество слов равно 1, т.е. делать ничего не надо (или нужно просто убрать ведущие пробелы).
  
  
Цитата

if(!(res = (char*) calloc(len + 1, sizeof(char))))

это динамическое выделение памяти под временную строку. Сначала мы получаем правильную временную строку, а потом уже в конце копируем ее в старую.

Цитата

Что такое i и j и почему равны нулю в 84 строке.

i - это указатель на текущий символ во входной строке
j - указатель на текущий символ в выходной строке 
Индексы не совпадают, так как в выходную строку мы после каждого найденного слова дописываем необходимое количество пробелов.

Цитата

if (!isspace(str[i])) 

Если текущий символ не является символом-разделителем (по умолчанию пробелы и некоторые другие).


--------------------
Помни - когда ты спишь, враг не дремлет
Спи чаще и дольше, изматывай врага бессоницей
PM MAIL ICQ   Вверх
anad
Дата 1.12.2006, 13:42 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 62
Регистрация: 30.3.2006

Репутация: нет
Всего: нет



А что такое k, count и почему res=0 изначально?
 str[i]='  ';  ?
n=strlen(str);  ?
Я так понимаю в задачи две функции?

Добавлено @ 13:51 
Забыла еще спросить, зачем нужны библиотеки: 
#include <stdlib.h> и
#include <ctype.h> ?
PM MAIL   Вверх
anad
Дата 1.12.2006, 15:25 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 62
Регистрация: 30.3.2006

Репутация: нет
Всего: нет



Не понятна разница между:
Код

count = get_words_count(str);
    n = strlen(str);
    if ((count == 1) && (str[0] != ' '))  // if only one word and no leading gaps
    {
      for(i = n; i < len; i++)           // fill following spaces with gaps
         str[i] = ' ';
      return 1;
    }

и
Код

if (count == 0)             // if only one word  //ПОЧЕМУ только 1 слово?ведь приравнивается к 0.          
{
       while ((i < n) && (str[i] != ' '))  // copy word in res
          res[j++] = str[i++];
       for (i = 0; i < gapkol; i++)        //add gaps into str end
          res[j++] = ' ';
       strcpy(str, res);                  // restore str
       str[len - 1] = '\0';
       free(res);
       return 1;
    }



А это зачем?
Код

gapkol = len - n;   // following gaps count
    count--;            // count of gaps groups

и
Код

if(str[k] == ' ')
gapkol++;


И последний вопрос, как выводятся числа?


PM MAIL   Вверх
anad
Дата 1.12.2006, 20:09 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 62
Регистрация: 30.3.2006

Репутация: нет
Всего: нет



Может проще как-нибудь можно решить?
PM MAIL   Вверх
ivashkanet
Дата 1.12.2006, 20:19 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Кодю потиху
****


Профиль
Группа: Участник Клуба
Сообщений: 3684
Регистрация: 23.2.2006
Где: Гомель, Беларусь

Репутация: 9
Всего: 149



Блин, а сами будем что-нибудь делать?
По полочкам им разложили, код дали.
Что еще сделать? 
Разжевать и в рот положить?

Давайте-ка сами подумайте.
Никто а вас всю работу делать не будет.
А если хотите чтобы сделали, то вам сюда.

Это сообщение отредактировал(а) ivashkanet - 1.12.2006, 22:07
PM MAIL WWW ICQ   Вверх
Kuvaldis
Дата 1.12.2006, 22:00 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


механик-вредитель
***


Профиль
Группа: Участник Клуба
Сообщений: 1189
Регистрация: 16.6.2006
Где: Минск

Репутация: 32
Всего: 61



anad
идею проще, чем я тебе описал, не придумать...
Если хочешь, можешь сама сделать...
ты мне напомнила анекдот
Тетя звонит в online поддержку и говорит:
-Я устанавливаю Вашу программу с комплекта дискет. Мне поступают сообщения "Вставьте следующую дискету" Я уже 5 с трудом вставила а 6-я не влезает. И что мне прикажете делать?

Есть очень хороший способ узнать, зачем нужно то или иное описание - удали строку и посмотри, какие ошибки будут...
Зачем нужны те или иные переменные?
запусти программу по шагам и посмотри в явном виде, как она работает и куда что пишется..


--------------------
Помни - когда ты спишь, враг не дремлет
Спи чаще и дольше, изматывай врага бессоницей
PM MAIL ICQ   Вверх
anad
Дата 1.12.2006, 22:06 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 62
Регистрация: 30.3.2006

Репутация: нет
Всего: нет



Ок!Спасибо! Намучились наверное со мной.
PM MAIL   Вверх
Rockie
Дата 2.12.2006, 00:12 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1143
Регистрация: 23.4.2006

Репутация: 13
Всего: 31



Цитата(anad @  29.11.2006,  21:39 Найти цитируемый пост)
Программа, выравнивающая текст по правому краю, т.е. равномерно размещающая по строке пробелы между словами так, чтобы длина каждой строки стала=n.

В свое время делал но на С++, со string. На красоту в данном случае не претендую, но все равно выложу, раз тему такую подняли. =)

Код
#include<iostream>

using namespace std;

int main()
{  string str = "here is a simple string";
   int num_spaces = 0;                 // кол-во пробелов в нашей строке
   int first = 0;

  // ПОДСЧИТЫВАЕМ КОЛ-ВО СУЩЕСТВУЮЩИХ ПРОБЕЛОВ
   first = str.find(" ");              // находим позицию первого пробела
   if(first!=-1) num_spaces++;

   // на случай, если пробелов в строке вообще нет
   else { cout<<"error, there is no spaces"; return 1;}

   while(1)                            // подсчитываем сумму пробелов
     { first = str.find(" ",first+1);
       if(first==-1) break;
       num_spaces++;
     }

  // ПОДСЧИТЫВАЕМ, СКОЛЬКО ПРОБЕЛОВ НАДО ДОБАВИТЬ,
  // если считать что длина строки 80 символов
   int space_to_add = ( (80 - str.length()) / num_spaces );

  // ДОБАВЛЯЕМ ПРОБЕЛЫ
   first = str.find(" ");             // сначала к первому
   str.insert(first, space_to_add, ' ');

   while(1)                           // а затем ко всем последующим
     { first = str.find(" ",first+space_to_add+1);
       if(first==-1) break;
       str.insert(first, space_to_add, ' ');
     }

  cout<<str;

  cin.get();
  return 0;
}


Это сообщение отредактировал(а) Rockie - 2.12.2006, 00:13


--------------------
Чтобы иметь большой гардероб - надо иметь большой гардероб.
PM   Вверх
Dov
Дата 3.12.2006, 01:56 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


аСинизатор
***


Профиль
Группа: Завсегдатай
Сообщений: 1721
Регистрация: 10.5.2003
Где: Эрец-Исраэль

Репутация: 50
Всего: 88



Результат работы программы:

Код
Source text:
--------------
I still hold your hand in mine
In mine when I'm asleep
And I will bear my
When I'm kneeling at your feet
Goodbye
Goodbyemyfriendgoodbyemylover
You have been the one
You have been the one for
I'm so hollow, I'm so hollow
I'm so, I'm so hollow

Enter required width(30...80) of the text: 45

         1         2         3         4
123456789012345678901234567890123456789012345

I    still    hold    your   hand   in   mine
In       mine       when      I'm      asleep
And        I        will        bear       my
When    I'm    kneeling    at    your    feet
G       o       o      d      b      y      e  // одно слово тянем!
Go od by em yf ri en dg oo db ye my l o v e r  // и здесь!!! 
You       have       been       the       one
You     have     been     the     one     for
I'm     so     hollow,    I'm    so    hollow
I'm       so,       I'm       so       hollow



Код
#include <stdio.h>                        // для printf(), scanf(), putchar(), puts()... 
#include <conio.h>                        // для getch()
#include <ctype.h>                        // для isspace()
#include <string.h>                       // для strlen()

#define WIDTH 80                          // максимальная ширина текста
#define SIZE  10                          // количество строк в массиве

int  MaxLen    (char** strarr);           // функция возвращает максимальную длину строки в массиве строк
int  Words     (char* str, int* alpha);   // функция возвращает количество слов в строке
void Feathering(char* str, int len);      // функция растяжки строки

int main() 
{
    char* text[WIDTH] = {                 // наш текст
        "I still hold your hand in mine",
        "In mine when I'm asleep",
        "And I will bear my",
        "When I'm kneeling at your feet",
        "Goodbye",
        "Goodbyemyfriendgoodbyemylover",
        "You have been the one",
        "You have been the one for",
        "I'm so hollow, I'm so hollow",
        "I'm so, I'm so hollow"
    };

    int i;                                // переменная управления циклом
    int width;                            // требуемая ширина текста(запрашиваем у пользователя)
    int lenstr = MaxLen(text);            // длина максимальной строки в тексте

    // выводим наш текст на экран
    printf(" Source text:\n--------------\n");
    for(i = 0; i < SIZE; i++)
        printf("%s\n", text[i]);

    // запрашиваем у пользователя ширину текста
    printf("\nEnter required width(%d...%d) of the text: ", lenstr, WIDTH);
    scanf("%d", &width);
    
    // корректируем её, если она выходит из    диапазона допустимых значений
    if(width > WIDTH)
        width = WIDTH;
    else if(width < lenstr)
        width = lenstr;

    // выводим вспомогательную линейку для визуального контроля значений
    putchar('\n');    
    for(i = 1; i <= width / 10; i++)
        printf("%10d", i);
    putchar('\n');
    for(i = 1; i <= width; i++)
        printf("%d", i % 10);
    putchar('\n');
    putchar('\n');

    // растягиваем строки текста до указанной пользователем ширины
    for(i = 0; i < SIZE; i++)
        Feathering(text[i], width);

    putchar('\n');

    // выходим
    puts("\nPress any key to quit...\n");
    getch();

    return 0;    
}

// подсчёт слов и 'букв' в строке
int Words(char* str,                      // строка
           int* alpha                     // счётчик 'букв' в строке
          )
{
    int count = 0;                        // обнуляем счётчик слов
    *alpha    = 0;                        // обнуляем счётчик 'букв'

    // пока не конец строки
    while(*str)
    {
        // пропускаем пробелы 
        while(*str && isspace(*str))
            str++;

        // если не пробел, значит это начало слова, считаем его
        if(*str && !isspace(*str))
            count++;

        // пропускаем остальные буквы и подсчитываем их 
        while(*str && !isspace(*str++))
            (*alpha)++;
    }          

    // возвращаем количество слов в строке
    return count;
}

// растягиваем строку
void Feathering(char* str,                // строка
                int   len                 // длина, на которую растягиваем
                )
{
    int    spaces;                        // количество необходимых пробелов
    int    i;                             // переменная управления циклом
    int    interval;                      // количество пробелов между словами 
    int    letcnt;                        // цепочка букв, которые нужно разделить пробелами в том 
                                          // случае, если строка состоит из одного слова
    int    spcrem;                        // остаток пробелов, равномерно добавляемых к интервалам
    int    letrem;                        // остаток букв, равномерно добавляемых к цепочкам букв
    int    gaps;                          // количество промежутков между словами в строке
    int    letters;                       // количество букв в строке

    gaps     = Words(str, &letters) - 1;  // вычисляем количество промежутков между словами
    spaces   = len - letters;             // общее количество необходимых пробелов
    interval = gaps ? spaces / gaps : 0;  // если есть промежуток, значит есть у него размер
    spcrem   = gaps ? spaces % gaps : 0;  // пробелы для коррекции интервала
    
    while(*str)
    {
        // пробелы пропускаем
        while(*str && isspace(*str))
            str++;
        
        // если нет промежутков, значит в строке
        // только одно слово и нужно его растянуть
        if(!gaps)
        {
            interval = letters > 1 ? spaces / (letters - 1) : 0;// определяем расстояние между символами
            spcrem   = letters > 1 ? spaces % (letters - 1) : 0;// и оставшиеся пробелы
            letcnt   = letters / (spaces + 1);                  // цепочка букв
            letrem   = letters % (spaces + 1);                  // и их остаток для добавления к цепочкам
            
            while(*str)
            {
                for(i = letcnt + (letrem > 0); *str && i; i--)
                    putchar(*str++);                            // печатаем цепочку букв
                
                printf("%*c", interval + (spcrem-- > 0), ' ');  // и интервал 
                
                if((letcnt + letrem) == 0)                           
                    str++;                                      // переходим к следующей цепочке
                if(letrem)
                    letrem--;                                   // уменьшаем остаток
            }
        }

        // если мы здесь, значит в строке больше одного слова
        else 
        {
            while(*str && !isspace(*str))                 
                putchar(*str++);                                // печатаем слово
            
            printf("%*c", interval + (spcrem-- > 0), ' ');      // и интервал            
        }        
    }
    putchar('\n');
}

// определяем максимальную длину строки в массиве строк
int MaxLen(char** strarr                  // массив строк
           )                                                       
{
    int len;                              // длина текущей строки
    int maxlen;                           // максимальная длина строки
    int i;                                // переменная управления циклом

    maxlen = strlen(strarr[0]);           // назначаем первую строку массива максимальной

    for(i = 1; i < SIZE; i++)             // в цикле    
    {
        len = strlen(strarr[i]);          // просматриваем строки
        if(len > maxlen)                  // если находим большую, 
            maxlen = len;                 // то назначаем её максимальной 
    }

    return maxlen;                        // возвращаем максимальную длину строки
}



--------------------
Тут вечности запах томительный,
И свежие фрукты дешевые, 
А климат у нас – изумительный, 
И только соседи – #уевые. 
                           Игорь Губерман.
PM   Вверх
anad
Дата 5.12.2006, 20:02 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 62
Регистрация: 30.3.2006

Репутация: нет
Всего: нет



Огромное СПАСИБО ВСЕМ кто мне помог!!!
PM MAIL   Вверх
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Центр помощи"

ВНИМАНИЕ! Прежде чем создавать темы, или писать сообщения в данный раздел, ознакомьтесь, пожалуйста, с Правилами форума и конкретно этого раздела.
Несоблюдение правил может повлечь за собой самые строгие меры от закрытия/удаления темы до бана пользователя!


  • Название темы должно отражать её суть! (Не следует добавлять туда слова "помогите", "срочно" и т.п.)
  • При создании темы, первым делом в квадратных скобках укажите область, из которой исходит вопрос (язык, дисциплина, диплом). Пример: [C++].
  • В названии темы не нужно указывать происхождение задачи (например "школьная задача", "задача из учебника" и т.п.), не нужно указывать ее сложность ("простая задача", "легкий вопрос" и т.п.). Все это можно писать в тексте самой задачи.
  • Если Вы ошиблись при вводе названия темы, отправьте письмо любому из модераторов раздела (через личные сообщения или report).
  • Для подсветки кода пользуйтесь тегами [code][/code] (выделяйте код и нажимаете на кнопку "Код"). Не забывайте выбирать при этом соответствующий язык.
  • Помните: один топик - один вопрос!
  • В данном разделе запрещено поднимать темы, т.е. при отсутствии ответов на Ваш вопрос добавлять новые ответы к теме, тем самым поднимая тему на верх списка.
  • Если вы хотите, чтобы вашу проблему решили при помощи определенного алгоритма, то не забудьте описать его!
  • Если вопрос решён, то воспользуйтесь ссылкой "Пометить как решённый", которая находится под кнопками создания темы или специальным флажком при ответе.

Более подробно с правилами данного раздела Вы можете ознакомится в этой теме.

Если Вам помогли и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, Poseidon, Rodman

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Центр помощи | Следующая тема »


 




[ Время генерации скрипта: 0.1646 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.