Разработка программного обеспечения. Функция, оставляющую в строке по одному пробелу между словами

Страницы работы

21 страница (Word-файл)

Содержание работы

РАЗДЕЛ 3. РАЗРАБОТКА ПРОГРАММНОГО ОБЕСПЕЧЕНИЯ

3.1.    Программирования на языках высокого уровня

3.1.1.  Написать функцию, оставляющую в строке по одному пробелу между словами.

Постановка задачи : в файле записана исходная строка, содержащая цифры, буквы, пробелы, символы. Наша задача: оставить между словами по одному пробелу, в независимости сколько их было в исходной строчке.

 


Блок-схема: решение: tmp2==NULL               да                         нет

 


да                     нетБлок-схема: решение: *tmp1==’ ’


                                    да                      нетБлок-схема: решение: *tmp1==’\0’        

 


да                   

                 

 


                       

 


Описание алгоритма: На вход функции передаются указатели на начало исходной строки и на начало результирующей. Программа начинает пробегать по символу всю строчку. Если в начале строки находиться множество пробелов, программа записывает их в результирующую строку, как только встретили символ, считаем, что это начало  слова. Слово, это набор любых символов, слова разделены пробелами. Записываем символы в результирующую строку до тех пор пока не встретили пробел. Как только встречаем пробел, программа пробегает по исходной строчки до следующего символа, не являющегося пробелом, и в результирующую строку записываем один пробел и текущий символ и т.д. до того пока не встретим символ конца строки («\0»). Функция завершена. Так же в функции реализована проверка на  заполнение результирующей строки, если заполнения не происходит, программа аварийно завершается, выдавая сообщение об ошибки.

программа:

/* в функцию передается, указатель на начало  исходной строки (*tmp1) и на начало результирующей строки(*tmp2)*/

int func(char *tmp1, char *tmp2){

int not_f = 0;

int len = 1;              //переменная для динамического выделения памяти,

//каждый раз увеличивается на один при добавлении

//нового символа

int index = 0;

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

if (tmp2 == NULL) {printf("ERROR->1\n"); abort();}

tmp2[len - 1] = '\0';     // записываем в конец результирующей строки знак //конца строки

len ++;                        //проходим всю строку по символам

for (;*tmp1 != '\0';tmp1 ++)

{     

if(*tmp1 == ' ') // если текущий символ равен пробелу

{             

while (*tmp1 == ' ')      //пропускаем все пробелы

tmp1++;

if (*tmp1 == '\0')  //если дошли до конца строки, выходим из   

{                    //условия

break;

} else

{                     //если не конец строки

if (not_f)

{

tmp2 = realloc(tmp2, len);  //динамически выделяем память

//под результирующую строку

tmp2[index ++] = ' ';      //и записываем в нее один пробел

len ++;

}

tmp2 = realloc(tmp2, len);   //выделяем память под следующий

//символ

tmp2[index ++] = *tmp1;        //записываем текущий символ из

//исходной строчки в результирующую

len ++;

}       

}

else{                          // текущий символ не пробел

tmp2[index++] = *tmp1;     //записываем текущий символ из

//исходной строчки в результирующую

tmp2 = realloc(tmp2, len);  //выделяем память

len ++;

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

if (tmp2 == NULL) {printf("ERROR->2\n");abort();}

}

not_f = 1;      //приравниваем флаг 1

}

tmp2[len-2] = '\0';   //после того как прочитали всю строку записываем

//в результирующую строку символ конца строки

return 0;

}

3.1.2. Написать функцию, раскладывающую число на простые множители (например, 36=3*3*2*2). Результат – последовательность множителей в массиве, ограниченная 0.

Постановка задачи : Дано число, разложить его на простые множества.

 


                   нет                     да

Описание алгоритма: В функцию передается заданное число. Организуется цикл от двух, до заданного числа. Если заданное число делится на текущее нацело, то значит, текущее число является простым множителем. Записываем множитель в массив и уменьшаем заданное число путем деления на множитель. Таким образом пробегая все числа мы получаем массив простых множителей.

программа:

/* в функцию передаются, само число и указатель на начало массива выходной строки (*а), в нем будут содержаться простые множители */

int func(int par, int *a) 
{   
 int i, index = 0; //i- счетчик для перебора всевозможных множителей, 

Похожие материалы

Информация о работе