Программа выводит на экран неправильную среднюю длину последовательности - C (СИ)
Формулировка задачи:
Всем привет!Просьба помочь с одним заданием,я сам как-бы с ним справился,но ответ не тот что нужен.Прошу вашей помощи)Заранее спасибо!Проблема в том,что он выводит на экран неправильную среднюю длину последовательности!И что значить Ratio в данном коде?Вот два вопроса с которыми я не могу справится,и прошу вас дорогие Форумчане не отказать мне в помощи!
Задание:Решить задачу с помощью цикла. Номер задания определяется остатком от деления варианта на восемь
Найти в массиве символов среднюю длину последовательностей из двух и более символов.
Вот код:
Листинг программы
- #include "stdio.h"
- double SendString(char *str, int size)
- {
- int Count = 0, Length = 0;
- int j, Lng = 0;
- char buf = str[0];
- for(j = 0; j < size; j++)
- {
- if ((str[j] == buf) && (j < size - 1))
- Lng++;
- else if ((str[j] == buf) && (j = size - 1))
- {
- Length = Length + Lng + 1;
- Count++;
- }
- else
- {
- if (Lng >= 2)
- {
- Length = Length + Lng;
- Count++;
- }
- Lng = 1;
- buf = str[j];
- }
- }
- printf("\nString: %s", str);
- printf("\nCount = %i", Count);
- printf("\nLength = %i", Length);
- if (Length + Count <= 1)
- return 0;
- else
- return (double)Length / (double)Count;
- }
- main()
- {
- char mystring[] = "alllz00777777mdloooo";
- int isize = 20;
- printf("\nRatio = %f", SendString(mystring, isize));
- }
Решение задачи: «Программа выводит на экран неправильную среднюю длину последовательности»
textual
Листинг программы
- #include <stdio.h>
- double calculateAverageLength(char* str) {
- int length = 0;
- int count = 0;
- do {
- char* s = str;
- char c = *str;
- while (c && c == *(++str));
- if (str - s > 1) {
- length += str - s;
- ++count;
- }
- } while (*str);
- return count ? (double)length / count : 0.0;
- }
- int main(void) {
- char mystring[] = "alllz00777777mdloooo";
- printf("Average length: %.3lf", calculateAverageLength(mystring));
- return 0;
- }
Объяснение кода листинга программы
- В функции
calculateAverageLength
определены две переменные типаint
:length
иcount
. Значение переменнойlength
инициализируется нулем, а значение переменнойcount
инициализируется нулем. - Затем в функции
calculateAverageLength
используется циклdo-while
, который выполняется до тех пор, пока значение первого символа строки не станет равным нулю. - Внутри цикла определен еще один цикл
while
, который выполняется до тех пор, пока значение следующего символа строки не станет отличным от значения текущего символа. - Внутри цикла
while
проверяется, если длина подстроки, которую уже обработал цикл, больше одного символа, то к переменнойlength
прибавляется разница между текущим и предыдущим указателями на строку, а к переменнойcount
прибавляется единица. - После окончания цикла
do-while
возвращается значение переменнойcount
. Если значение переменнойcount
больше нуля, то возвращается результат деления значения переменнойlength
на значение переменнойcount
. Если значение переменнойcount
равно нулю, то возвращается ноль. - В функции
main
определена строка-линейный массивmystring
, который содержит символыalllz00777777mdloooo
. - Затем с помощью функции
printf
выводится на экран сообщениеAverage length: %.3lf
, где значение переменнойlength
заменяется результатом вызова функцииcalculateAverageLength
с аргументомmystring
. - В конце функции
main
возвращается ноль, что означает успешный конец работы программы.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д