Программа выводит на экран неправильную среднюю длину последовательности - 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
возвращается ноль, что означает успешный конец работы программы.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д