Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 25.10.2008, 15:03   #1
Жека:)
Пользователь
 
Регистрация: 25.10.2008
Сообщений: 30
По умолчанию Помогите найти ошибку в коде C++

Собственно сам код:
#include <iostream.h>
#include <string.h>
#include <conio.h>
#include <stdio.h>
void main()
{
char s[100];
int k,i;
k=0;
clrscr();
cout<<"Vvedite stroku: ";
gets(s);
for (i=0; i<strlen(s); i++)
k=k+s[i];
cout<<"sum: "<<k;
getch();
}
Не пойму, почему выдаёт неправильные значения суммы элементов строки.
П.С. Работаю в Borland C++ 3.1 Так надо
Жека:) вне форума Ответить с цитированием
Старый 25.10.2008, 15:41   #2
pu4koff
Старожил
 
Аватар для pu4koff
 
Регистрация: 22.05.2007
Сообщений: 9,065
По умолчанию

потому что вы складываете коды символов, а не числа, которые записаны в строке. пробуйте atoi или тупо: k=k+s[i] - '0';
pu4koff вне форума Ответить с цитированием
Старый 25.10.2008, 15:51   #3
Жека:)
Пользователь
 
Регистрация: 25.10.2008
Сообщений: 30
По умолчанию

Спасибо, заработало, но что значит -'0'? Я разобраться хочу
Жека:) вне форума Ответить с цитированием
Старый 25.10.2008, 16:03   #4
pu4koff
Старожил
 
Аватар для pu4koff
 
Регистрация: 22.05.2007
Сообщений: 9,065
По умолчанию

Цитата:
Сообщение от Жека:) Посмотреть сообщение
Спасибо, заработало, но что значит -'0'? Я разобраться хочу
символы в кодовой странице идут по порядку: 0,1,2 и т.д.
соответственно '9' == '0' + 9
соответственно код символа - код нуля = число )
pu4koff вне форума Ответить с цитированием
Старый 25.10.2008, 16:04   #5
Stepler
Форумчанин
 
Аватар для Stepler
 
Регистрация: 03.02.2008
Сообщений: 213
По умолчанию

Цитата:
но что значит -'0'?
тоже что и -48, ASCII коды 0..9=48..57
Пишу программы на заказ, контакты под аватаром!
Отзывы тут
Stepler вне форума Ответить с цитированием
Старый 25.10.2008, 16:05   #6
Жека:)
Пользователь
 
Регистрация: 25.10.2008
Сообщений: 30
По умолчанию

СПС, теперь понятно
П.С. Понравился ваш форум. Тут можно получить дельные ответы.
Жека:) вне форума Ответить с цитированием
Старый 25.10.2008, 16:55   #7
Жека:)
Пользователь
 
Регистрация: 25.10.2008
Сообщений: 30
По умолчанию

Задача такая:
1) подсчитать кол-во слов (слово - набор 0 и 1) в сторке, разделённых пробелами или группой пробелов
2) подсчитать кол-во слов, сумма элементов которых делится на 5 без остатка, слова разделены пробелом или группой пробелов
Вот код:
#include <iostream.h>
#include <string.h>
#include <conio.h>
#include <stdio.h>
void main()
{
char s[100];
int k,k2,sum,i;
k=0;
sum=0;
k2=0;
clrscr();
cout<<"Vvedite stroku: ";
gets(s);
for (i=0; i<strlen(s); i++)
{
if (s[i]!=' ')
{
sum=sum+s[i]-'0';
}
if (s[i]==' ')
{
k++;
if (sum%5==0)
k2++;
sum=0;
}
}
cout<<"Kol-vo slov v stroke: "<<k<<endl;
cout<<"Kol-vo slov, deljashihsja na 5 bez ostatka: "<<k2<<endl;
getch();
}
Он работает, если слова разделены одним пробелом. А как видоизменить код, чтобы слова разделялись одним или несколькими пробелами? Я вот не смог придумать
Жека:) вне форума Ответить с цитированием
Старый 25.10.2008, 20:43   #8
Жека:)
Пользователь
 
Регистрация: 25.10.2008
Сообщений: 30
По умолчанию

Что, никто не знает?
Жека:) вне форума Ответить с цитированием
Старый 25.10.2008, 22:47   #9
pu4koff
Старожил
 
Аватар для pu4koff
 
Регистрация: 22.05.2007
Сообщений: 9,065
По умолчанию

Как-то так наверно (писал здесь и не проверял на работоспособность) :
Код:
...
bool flag = true; 
for (i=0; i<strlen(s); i++)
{
  if (s[i]!=' ')
  { 
    sum=sum+s[i]-'0';
    flag = true;
  }
  else if (flag)
  {
    k++;
    if (sum%5==0)
    k2++;
    sum=0;
    flag = false;
  }
}
...
ЗЫ. пользуйтесь тегом code
pu4koff вне форума Ответить с цитированием
Старый 26.10.2008, 18:21   #10
Жека:)
Пользователь
 
Регистрация: 25.10.2008
Сообщений: 30
По умолчанию

Вот ещё создал код:
Код:
#include <iostream.h>
#include <conio.h>
#include <stdlib.h>
#include <stdio.h>
#include <string.h>
void main()
{
char s[100];
int k,max,min,i,p,p1,p2;
k=0;
max=0;
min=256;
cout<<"Vvedite stroku: ";
gets(s);
for (i=0; i<strlen(s); i++)
{
if (s[i]!=' ')
k=k+1;
if (s[i]==' ')
{
if (k>max)
{
max=k;
p=i;
}
if (k<min)
{
min=k;
p2=i;
}
k=0;
}
}
p1=p;
p=p-max;
cout<<"Samoe dlinnoe slovo: ";
for (i=p; i<p1; i++)
cout<<s[i];
cout<<"\n";
p=p2;
p2=p-min;
cout<<"Samoe korotkoe slovo: ";
for (i=p2; i<p; i++)
cout<<s[i];
cout<<"\n";
getch();
}
Программа эта выводит максимальное и минимальное слово по длине на монитор. Если словы разделены одним пробелом, то всё работает нормально. А если несколькими пробелами, то выводится только слово с максимальной длиной, а с минимальной нет. Что сделать, чтобы вводя несколько пробелов меджду словами выводилось и слово с минимальной длиной?
Жека:) вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
помогите найти ошибку в коде плиз Айат Помощь студентам 2 01.10.2008 17:43
Памагите найти ошибку в коде...С++ Goblin Помощь студентам 1 13.05.2008 18:15
Помогите исправить ошибку в коде... prizrak1390 Общие вопросы Delphi 4 26.04.2008 13:19
помогите найти ошибку в коде Joker88 Помощь студентам 1 04.03.2008 12:43