Программа выводит на экран неправильную среднюю длину последовательности - 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;
}

Объяснение кода листинга программы

  1. В функции calculateAverageLength определены две переменные типа int: length и count. Значение переменной length инициализируется нулем, а значение переменной count инициализируется нулем.
  2. Затем в функции calculateAverageLength используется цикл do-while, который выполняется до тех пор, пока значение первого символа строки не станет равным нулю.
  3. Внутри цикла определен еще один цикл while, который выполняется до тех пор, пока значение следующего символа строки не станет отличным от значения текущего символа.
  4. Внутри цикла while проверяется, если длина подстроки, которую уже обработал цикл, больше одного символа, то к переменной length прибавляется разница между текущим и предыдущим указателями на строку, а к переменной count прибавляется единица.
  5. После окончания цикла do-while возвращается значение переменной count. Если значение переменной count больше нуля, то возвращается результат деления значения переменной length на значение переменной count. Если значение переменной count равно нулю, то возвращается ноль.
  6. В функции main определена строка-линейный массив mystring, который содержит символы alllz00777777mdloooo.
  7. Затем с помощью функции printf выводится на экран сообщение Average length: %.3lf, где значение переменной length заменяется результатом вызова функции calculateAverageLength с аргументом mystring.
  8. В конце функции main возвращается ноль, что означает успешный конец работы программы.

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

10   голосов , оценка 4.1 из 5
Похожие ответы