//index – счётчик выходного массива, он увеличивается,
// если будет найден новый множитель.
int len = 2; // счетчик кол-ва элементов в выходном массиве
for(i=2;i<=par;) // цикл для перебора всевозможных множителей
if((par%i)==0){ //если число делится без остатка значит,
// i является простым множителем
a[index ++] = i; // заносим текущий множитель в выходной массив,
//и увеличиваем index на 1
a = realloc(a, (index+2) * sizeof(int)); //выделяем память для
// следующего элемента
par/=i; //делим число на текущий множитель ,
// чтоб получит число для
//определения следующего множителя
} else i++; //если число не делится нацело, берём следующий множитель
a[index] = 0; //заполняем последний или единственный
//(если вдруг множители были не обнаружены) элемент нулём
return 0;
}
3.1.3. Написать функцию, "переворачивающую" в строке все слова. (Например: "Жили были дед и баба" - "илиЖ илыб дед и абаб").
Постановка задачи : Задана строка, состоящая из слов, слова могут содержать любые символы. Слова разделены пробелами.
да
|
да
Описание алгоритма: на вход функции поступает указатель на начало заданной строки и указатель на результирующую строку. Программа определяет какова длина заданной строки, т.е. сколько символов в ней находится. Задается цикл по всей длине заданной строки. Если в самом начале строки встречаются пробелы, записываем их в результирующую строчку. И запоминаем позицию последнего пробела, если встретили символ, идем до следующего пробела и запоминаем позицию. Организуем цикл по позициям, в котором записываем в результирующую слова наоборот. таким образом дойдя до конца заданной строчки мы в результирующей строке получим все слова наоборот. в конце результирующей строки ставим символ конца строки («\0») .
программа:
/* в функцию передаются указатели на начало исходной строки (*str1) и на начало результирующей (*str2)*/
int func(char *str1, char *str2){
int i, j, len, pos1 = 0, pos2 = 0;
int index = 0;
char *tmp;
len = strlen(str1); // определяем длину исходной строки, кол-во символов
for(i = 0; i <= len; i++){ // цикл, по всем символам исходной строки
if ((str1[i] == ' ') && (i == 0)){ //если встретили пробел, в начале
while(str1[i] == ' '){ //пробегаем все пробелы
str2[index ++] = str1[i ++]; //и записываем их в результирующую
//строчку, так же как они были
//в исходной строчки
}
pos1 = i; //запоминаем позицию
}
if (((str1[i] == ' ') && (i != 0)) || (i == len)){ //если встретили пробел
//не вначале строчке
//или в конце строчке
//запоминаем вторую позицию
pos2 = i - 1;
for(j = pos2;j >= pos1;j --){ //цикл, со второй до первой
//позиции (т.е. с конца до начала
// слова)
str2[index ++] = str1[j]; //записываем в результирующую
//строку слово наоборот
}
if (str1[i] == ' ') str2[index ++] = ' ';// если встретили пробел
//записываем его в результирующую
//строку на ту же позицию как и в
//исходной строке
pos1 = i + 1; //запоминаем позицию
}
}
str2[len] = '\0'; //записываем в конец результирующей строки, символ
// конца строки
return 0;
}
3.1.4. Написать функцию, выполняющую поиск в строке два одинаковых фрагмента, не содержащих пробелы и имеющих максимальную длину, и возвращающую указатель на начало первого из них.
Постановка задачи: имеется строка с текстом. Наша задача: найти в строке два одинаковых фрагмента, не содержащих пробелы и имеющих максимальную длину и вернуть позицию в строке первого из них.
Уважаемый посетитель!
Чтобы распечатать файл, скачайте его (в формате Word).
Ссылка на скачивание - внизу страницы.