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

               }else{
                       if(array[i]>array[i-1]){el++;}
                       else{
                               cycle=0;
                               if(el>el_max){ el_max=el;        pos_max=pos;   }
                       }
               }
        }
        if(el>el_max){ el_max=el;     pos_max=pos;   }
        printf("\nMaximalnaya posledovatelnost is %d elementov nachalo %d",el_max,pos_max);
}

 


 


3.1.12. Написать функцию, преобразовывающую дробную часть переменной типа double в строку символов (путем последовательного умножения дробной части на 10).

Постановка задачи : Дана переменная типа double.Задача: преобразовать дробную часть переменной в строку символов.  при

Алгоритм: В  функцию передается переменная (типа double)  и указатель на начало результирующей строки. От числа отнимаем его целую часть. Полученное число умножаем на 10 и находим остаток от деления на 10 (предварительно преобразовав нецелое число в целое) и записываем остаток в массив. Теперь от нашего числа отнимаем целую часть. Делаем до тех пор пока наше число не будет равно нулю.

/*в функцию передается переменная (num) и указатель на начало результирующей строки (*str1)*/

int func(double num, char *str1){
    int len = 2;
    int index = 0;
    double tmp;
    char c;
    
    num -= floor(num); //от числа отнимаем его целую часть, floor() – выделяет у числа целую часть не округляя его
     while(num != 0.0){                                      //цикл, до тех пор пока наше число не будет =0
                   num *= 10;                                      //умножаем наше число на 10
                   tmp = (long) num % 10;                //преобразовав его в целое находим остаток от деления на 10
                   str1[index ++] = tmp;                    //записываем полученный остаток в строку
                   str1=realloc(len);                            //динамически увеличиваем массив до длины len
                   len++;                                              //увеличиваем длину строки
                   num =  num - floor(num);             //от полученного числа отнимаем его целую часть
    }
 
return 0;
}

 



3.1.13. Написать функцию, выполняющую поиск наименьшего общего кратного для всех элементов массива - минимальное число, которое делится на все элементы массива без остатка.

Постановка задачи : Дан  массив целых чисел (типа integer). Задача: найти наименьше кратное для всех элементов массива.

Описание алгоритма: В функцию передаётся указатель на массив и кол-во элементов.Берём за Наименьшее Общее Кратное (НОК)  единицу, делаем цикл по всему массивуи смотрим делится ли текущий НОК на каждый элемент  массива, если да , то оно и есть искомый НОК иначе увеличиваем его на единицу и запускаем цикл заново.

Текст:

int krat(int *array,int kol)
{
int rez=-1;
        for(i=1;i<65535;i++) //перебираем НОК от 1 до 65535 
        {
            for(j=0;j<kol;j++)         //смотрим делится ли текущий нок 
                                      //на все элементы массива
               if(i%array[j]!=0)break;        //проверяем делится ли НОК 
                                              //на текущий элемент массива 
            if(j==kol){rez=i; break;}  //если кол-во делящихся 
                       //Эл. Массива = кол-во Эл. Массива НОК
                       // присваиваем НОК = i
        }
return rez;    // возвращаем найденный НОК или -1.
}

 



3.1.14. Написать функцию, формирующую массив простых чисел в диапазоне от 2 до заданного. Очередное простое число определяется попыткой деления нацело числа на все уже накопленные простые числа.

Постановка задачи: Задается целое число. Наша задача сформировать массив простых чисел в диапазоне от 2 до заданного.

 


ошибка

 
Блок-схема: решение: num < 2