Сергей Юрьевич! Еще вопрос к Вам.
Задача 22. Может я совсем туплю,но я не понимаю,что требуется сделать.Просто не понятна даже сама формулировка задачи...
Информатика (Сессия. I семестр)
Сообщений 41 страница 60 из 324
Поделиться412007-01-05 13:16:32
Поделиться422007-01-05 13:32:38
Если есть строка s, то чтобы определить, является ли её i-тый элемент цифрой,
надо выполнить проверку
if (s[i] >= '0' && s[i] <= '9)
после этого (а надо посчитать сумму цифр в строке), мы можем некой переменной sum просто присваивать все s[i],которые подошли под вышеописанное условие?
Поделиться432007-01-05 13:51:42
Задача 22. Может я совсем туплю,но я не понимаю,что требуется сделать.Просто не понятна даже сама формулировка задачи...
OK, смотрим формулировку задачи:
Дана строка, про которую известно, что она содержит ровно 10 гласных латинских букв. Составить программу, формирующую целочисленный массив размера 10, содержащий индексы вхождений этих гласных букв в строку.
Поясню на примере.
Пусть пользователь ввел с клавиатуры строку "ABBAABOOOBBAAAA".
Обратите внимание: в строке ровно 10 гласных букв, как и требуется из условия.
Тогда массив, формируемый программой для введённой строки, выглядит так:
0, 3, 4, 6, 7, 8, 11, 12, 13, 14
Нетрудно заметить, что массив содержит номера элементов строки, в которых расположены гласные буквы.
Скоробогатов написал(а):Если есть строка s, то чтобы определить, является ли её i-тый элемент цифрой,
надо выполнить проверку
if (s[i] >= '0' && s[i] <= '9')после этого (а надо посчитать сумму цифр в строке), мы можем некой переменной sum просто присваивать все s[i],которые подошли под вышеописанное условие?
Не совсем так.
Перед тем, как прибавлять s[i] к sum, надо из него вычесть '0':
sum += s[i] - '0';
Дело в том, что цифры имеют коды от '0' до '9' (другими словами, от 48 до 57), поэтому для того чтобы преобразовать цифру в число, лежащее в диапазоне от 0 до 9, нужно из кода цифры вычесть '0' (то есть 48).
Отредактировано Скоробогатов (2007-01-05 13:54:48)
Поделиться442007-01-05 13:55:19
Поясню на примере.
Пусть пользователь ввел с клавиатуры строку "ABBAABOOOBBAAAA"....
О да...спасибо! я почему то была уверена что строка обязательно должна состоять из 10 элементов...отсюда и заморочки!
Поделиться452007-01-05 15:03:06
В крайнем случае установите Pelles C (7.15 Mb) и не мучайтесь
Качаю... А чем же он настолько плох, что его предлагают в качестве решения проблемы только в самом последнем случае?
Поделиться462007-01-05 15:21:00
for(j=1;j<=A[i] && f < 1000000;j++)
{
f*=j;
}
if(f<1000000)
{
sum++;
}
А нафига считать факторил каждый раз??? Можно один раз посчитать у какого max числа факториал <1 000 000 и затем проверять числа не на факториал, а на "не больше" найденного. (в этой задаче 8 чисел, а если их N? а N заранее неизвестено)
Поделиться472007-01-05 15:59:44
Можно один раз посчитать у какого max числа факториал <1 000 000 и затем проверять числа не на факториал, а на "не больше" найденного.
А ты представь, что из этого выйдет. Все равно придется в среднем для половины элементов массива факториал считать.
в этой задаче 8 чисел, а если их N? а N заранее неизвестено
Тогда хреначишь туда функции для операций над динамической памятью...
Поделиться482007-01-05 20:02:02
А чем же он настолько плох, что его предлагают в качестве решения проблемы только в самом последнем случае?
Pelles C не то, чтобы плох, просто среда разработки у него значительно примитивнее, чем у Visual Studio 2005, и ещё его не получится использовать в следующем семестре, потому что он не поддерживает C++.
Можно один раз посчитать у какого max числа факториал <1 000 000 и затем проверять числа не на факториал, а на "не больше" найденного.
Можно и так.
Более того, было бы неплохо подкорректировать условие задачи таким образом, чтобы верхняя граница для факториала вводилась пользователем с клавиатуры, а не была жёстко задана, как сейчас.
Поделиться492007-01-05 20:45:20
А ты представь, что из этого выйдет. Все равно придется в среднем для половины элементов массива факториал считать.
нафига, посчитали для какой пары чисел х и х+1 х! < 1 000 000 < (x+1)! и затем сравниваем элементы массива с этим х, и ни для какой половины факториал считать не придется...
Тогда хреначишь туда функции для операций над динамической памятью...
в смысле?
Поделиться502007-01-05 21:03:19
Ну там, malloc, free...
Поделиться512007-01-06 11:15:59
Ну там, malloc, free...
не могу понять зачем они там? масиив можно создать и int *M = new int[N] и работать с ним нормально... только потом не забыть сделать ему delete []M
Поделиться522007-01-06 12:54:53
Ну где косяк??? :cray:
// 20.cpp : Defines the entry point for the console application.
//
#include "stdafx.h"
#include <stdio.h>
#include <string.h>
int summa(char s[100])
{
int i,sum=0;
for(i=0;i<100;i++)
if(s[i]>='0' && s[i]<=9)
sum+=s[i]-'0';
return sum;
}
int main(void)
{
char s[100];
printf("Enter stroky:\n");
gets(s);
printf("%d",summa(s));
return 0;
}
Поделиться532007-01-06 21:58:48
Ну где косяк???
как я понял суть задачи в том чтобы посчитать сумму цифр с вводимой строке.
тогда:
1) почему работаем с фуксированной длиной в 100 символов?
2) зачем вводили строку?
ответы:
1) вводим пока не нажали Enter (код 10)
2) зачем вводить строку, если можно ввести символ и сразу проанализировать его и если это цифра (те 0,1..9) то прибавляем к сумме
PS если надо, то напишу код
Поделиться542007-01-07 01:19:10
не могу понять зачем они там?
Ну, нам так объясняли.
масиив можно создать и int *M = new int[N] и работать с ним нормально... только потом не забыть сделать ему delete []M
Не понял. Поясни.
Ну где косяк???
Нигде.
1) почему работаем с фуксированной длиной в 100 символов?
Опять же, чтобы не париться с malloc'ом (а для выделения динамической памяти мы проходили только его), Сергей Юрьевич вроде разрешил нам писать такой бред. Естественно, в нормальных условиях не правильно, но мы только учимся...
2) зачем вводили строку?
А как иначе мы ее получим??
1) вводим пока не нажали Enter (код 10)
2) зачем вводить строку, если можно ввести символ и сразу проанализировать его и если это цифра (те 0,1..9) то прибавляем к сумме
Типо подобного?
char a;
int sum=0;
while(key==10)
{
scanf("%d", &a)
if (a>='0' && a<='9') sum++;
}
Только мы не знаем таких зарезервированных переменных в Си, которые в Дельфи, например, обозначаются как key...
Поделиться552007-01-07 11:41:38
Нигде.
Да? а не работает почему??
как я понял суть задачи в том чтобы посчитать сумму цифр с вводимой строке.
тогда:
1) почему работаем с фуксированной длиной в 100 символов?
2) зачем вводили строку?
ответы:
1) вводим пока не нажали Enter (код 10)
2) зачем вводить строку, если можно ввести символ и сразу проанализировать его и если это цифра (те 0,1..9) то прибавляем к сумме
PS если надо, то напишу код
Ты вообще откуда умный такой взялся?
Нас как учили-так мы пока и делаем. Хоть так бы научиться...поэтому если можешь помочь-то давай попроще как-нить...
Поделиться562007-01-07 12:01:02
Ну, нам так объясняли.
ну раз так, то так
А как иначе мы ее получим??
а нам строка нужна на выходе или нет???
а получить её можно так
char c;
int sum = 0;
do
{
scanf("%c", &c) ;
if ((c >= '0') && (c <= '9'))
{ sum += c - '0'; }
}
while (key != 10)
Ты вообще откуда умный такой взялся?
не бузи
Поделиться572007-01-07 12:17:53
не бузи
не бузю
Так ты не можешь подсказать что в данном коде не правильно?
Отредактировано Кузя (2007-01-07 12:20:25)
Поделиться582007-01-07 17:48:37
в коде мне не понравилось только то о чем я уже говорил: где гарантия, что ввели именно 100 символов...
при вычислении суммы обращаемся ко всем 100 символам, даже к тем которые не ввели
если значение переменной не было введено, то что будет в переменной - никто не знает вроде больше нечему глючить
PS введи 100 символов и проверь подсчет суммы
Поделиться592007-01-07 18:03:12
при вычислении суммы обращаемся ко всем 100 символам, даже к тем которые не ввели
Точно, вспомнил! Проблема в этой строке:
for(i=0;i<100;i++)
вместо i<100 надо писать i<strlen(s) Из-за этого и глючит, SkAlD прав.
а нам строка нужна на выходе или нет???
Да нет, вроде бы... :/
а получить её можно так
Да, собственно это я и написал, вернее, хотел написать, но сделал сразу две ошибки...
while (key != 10)
Все-таки key? Будем знать... :yes:
Поделиться602007-01-07 18:09:54
PS введи 100 символов и проверь подсчет суммы
Неа,выдает как и прежде-0!
вместо i<100 надо писать i<strlen(s) Из-за этого и глючит, SkAlD прав.
все равно глючит...