Другие языки программирования и технологии

Программеры С++ сюда

Написал алгоритм подсчета различных букв в слове: #include "stdafx.h" #include <iostream> #include <cstring> using namespace std; int _tmain(int argc, _TCHAR* argv[]) { char s[] = "abcdefgg"; int i, j, n, t; double r; r = 0.0; t = strlen(s); for(i = 0; i <= t; i++){ n = 0; for(j = 0; j <= t; j++) if(s == s[j]) n++; r += 1 / n; } cout << "r = " << r << '\n'; system("PAUSE"); return 0; } Программа выполняется без ошибок, но выводит не правильный результат(r = 0), составил блок схему, решил все на бумаге, и получилось r = 1, что в моем коде не так?
Тёмка ))))
Тёмка ))))
33
В общем идея правильная и код, если поправить, работает.
Ошибки в сравнении букв, границах для for и, что важно, в приведении типа для r
#include "stdafx.h"
#include <iostream>
#include <cstring>
using namespace std;

int _tmain(int argc, _TCHAR* argv[])
{
char s [ ] = "gabcdefgggggggggg";

int i, j, n, t;
double r;
r = 0.0;
t = strlen(s);
for(i = 0; i < t; i ++){
n = 0;
for(j = 0; j < t; j++)
if(s [ i ] == s [ j ] ) n++;
r += 1.0 / n; //Точка обязательно!
}

cout << "r = " << r << '\n';

system("PAUSE");
return 0;
}
ВМ
Вадим Макарятов
35 996
Лучший ответ
"потом цикл for без скобок" это не ошибка
и "деления на ноль" тут тоже не получится, потому что буква втретится в строке как минимум один раз
В данной задаче в циклах надо использовать знак строго меньше, а не "< ="

Я исправил ваш код, но в целом идея не совсем правильная, некоторые буквы то будут повторяться во внешнем цикле
(ниже это JAVA, но синтаксис такой же должен быть)
String s = "abcdefgg";
int i, j, n, t;
double r;
r = 0.0;
t = s.length();
for(i=0;i< t;i++){
n=0;
for(j=0;j< t; j++) if(s.charAt(i)==s.charAt(j)) n++;
r += 1 / n;
System.out.println(s.charAt(i)+" - "+n+" раз");
}
System.out.println("r = "+r);
Меруж Авакян
Меруж Авакян
15 838
n = 0
потом ты пытаешься делить на 0
r += 1 / n;
уже ошибка
потом цикл for без скобок
Рик Н_Р
Рик Н_Р
2 077