[реклама вместо картинки]
Сделать стартовой Добавить в Избранное
Часы в заголовке окна

Форум студентов МГУ Печати ФИТиМ ИТД

Информация о пользователе

Привет, Гость! Войдите или зарегистрируйтесь.


Вы здесь » Форум студентов МГУ Печати ФИТиМ ИТД » Архив » Информатика (Сессия. I семестр)


Информатика (Сессия. I семестр)

Сообщений 41 страница 60 из 324

41

Сергей Юрьевич! Еще вопрос к Вам.
Задача 22. Может я совсем туплю,но я не понимаю,что требуется сделать.Просто не понятна даже сама формулировка задачи... :(

0

42

Скоробогатов написал(а):

Если есть строка s, то чтобы определить, является ли её i-тый элемент цифрой,
надо выполнить проверку
    if (s[i] >= '0' && s[i] <= '9)

после этого (а надо посчитать сумму цифр в строке), мы можем некой переменной sum просто присваивать все s[i],которые подошли под вышеописанное условие?

0

43

Кузя написал(а):

Задача 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)

0

44

Скоробогатов написал(а):

Поясню на примере.
Пусть пользователь ввел с клавиатуры строку "ABBAABOOOBBAAAA"....

О да...спасибо! я почему то была уверена что строка обязательно должна состоять из 10 элементов...отсюда и заморочки! :D

0

45

Скоробогатов написал(а):

В крайнем случае установите Pelles C (7.15 Mb) и не мучайтесь :-)

Качаю... А чем же он настолько плох, что его предлагают в качестве решения проблемы только в самом последнем случае?  ;)

0

46

Скоробогатов написал(а):

for(j=1;j<=A[i] && f < 1000000;j++)
        {
            f*=j;
        }
        if(f<1000000)
        {
            sum++;
        }

А нафига считать факторил каждый раз??? Можно  один раз посчитать у какого max числа факториал <1 000 000 и затем проверять числа не на факториал, а на "не больше" найденного. (в этой задаче 8 чисел, а если их N? а N заранее неизвестено)

0

47

SkAlD написал(а):

Можно  один раз посчитать у какого max числа факториал <1 000 000 и затем проверять числа не на факториал, а на "не больше" найденного.

А ты представь, что из этого выйдет. Все равно придется в среднем для половины элементов массива факториал считать.

SkAlD написал(а):

в этой задаче 8 чисел, а если их N? а N заранее неизвестено

Тогда хреначишь туда функции для операций над динамической памятью...

0

48

Kit написал(а):

А чем же он настолько плох, что его предлагают в качестве решения проблемы только в самом последнем случае?

Pelles C не то, чтобы плох, просто среда разработки у него значительно примитивнее, чем у Visual Studio 2005, и ещё его не получится использовать в следующем семестре, потому что он не поддерживает C++.

SkAlD написал(а):

Можно  один раз посчитать у какого max числа факториал <1 000 000 и затем проверять числа не на факториал, а на "не больше" найденного.

Можно и так.
Более того, было бы неплохо подкорректировать условие задачи таким образом, чтобы верхняя граница для факториала вводилась пользователем с клавиатуры, а не была жёстко задана, как сейчас.

0

49

Kit написал(а):

А ты представь, что из этого выйдет. Все равно придется в среднем для половины элементов массива факториал считать.

нафига, посчитали для какой пары чисел х и х+1 х! < 1 000 000 < (x+1)! и  затем сравниваем элементы массива с этим х, и ни для какой половины факториал считать не придется...

Kit написал(а):

Тогда хреначишь туда функции для операций над динамической памятью...

в смысле?

0

50

Ну там, malloc, free...  :rolleyes:

0

51

Kit написал(а):

Ну там, malloc, free...

не могу понять зачем они там? масиив можно создать и int *M = new int[N] и работать с ним нормально... только потом не забыть сделать ему delete []M

0

52

Ну где косяк??? :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;
}

0

53

Кузя написал(а):

Ну где косяк???

как я понял суть задачи в том чтобы посчитать сумму цифр с вводимой строке.

тогда:
1) почему работаем с фуксированной длиной в 100 символов?
2) зачем вводили строку?

ответы:
1) вводим пока не нажали Enter (код 10)
2) зачем вводить строку, если можно ввести символ и сразу проанализировать его и если это цифра (те 0,1..9) то прибавляем к сумме

PS если надо, то напишу код

0

54

SkAlD написал(а):

не могу понять зачем они там?

Ну, нам так объясняли.

SkAlD написал(а):

масиив можно создать и int *M = new int[N] и работать с ним нормально... только потом не забыть сделать ему delete []M

Не понял. Поясни.

Кузя написал(а):

Ну где косяк???

Нигде.

SkAlD написал(а):

1) почему работаем с фуксированной длиной в 100 символов?

Опять же, чтобы не париться с malloc'ом (а для выделения динамической памяти мы проходили только его), Сергей Юрьевич вроде разрешил нам писать такой бред. Естественно, в нормальных условиях не правильно, но мы только учимся...

SkAlD написал(а):

2) зачем вводили строку?

А как иначе мы ее получим??

SkAlD написал(а):

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...

0

55

Kit написал(а):

Нигде.

Да? а не работает почему?? :mad:

SkAlD написал(а):

как я понял суть задачи в том чтобы посчитать сумму цифр с вводимой строке.
тогда:
1) почему работаем с фуксированной длиной в 100 символов?
2) зачем вводили строку?
ответы:
1) вводим пока не нажали Enter (код 10)
2) зачем вводить строку, если можно ввести символ и сразу проанализировать его и если это цифра (те 0,1..9) то прибавляем к сумме
PS если надо, то напишу код

Ты вообще откуда умный такой взялся? :D
Нас как учили-так мы пока и делаем. Хоть так бы научиться...поэтому если можешь помочь-то давай попроще как-нить...

0

56

Kit написал(а):

Ну, нам так объясняли.

ну раз так, то так

Kit написал(а):

А как иначе мы ее получим??

а нам строка нужна на выходе или нет???

а получить её можно так

char c;
int sum = 0;
do
{
  scanf("%c", &c) ;
  if ((c >= '0') && (c <= '9'))
    {  sum += c - '0'; } 
}
while (key != 10)

Кузя написал(а):

Ты вообще откуда умный такой взялся?

не бузи

0

57

SkAlD написал(а):

не бузи

не бузю :D
Так ты не можешь подсказать что в данном коде не правильно? :(

Отредактировано Кузя (2007-01-07 12:20:25)

0

58

в коде мне не понравилось только то о чем я уже говорил: где гарантия, что ввели именно 100 символов...
при вычислении суммы обращаемся ко всем 100 символам, даже к тем которые не ввели
если значение переменной не было введено, то что будет в переменной - никто не знает вроде больше нечему глючить

PS введи 100 символов и проверь подсчет суммы

0

59

SkAlD написал(а):

при вычислении суммы обращаемся ко всем 100 символам, даже к тем которые не ввели

Точно, вспомнил! Проблема в этой строке:

Кузя написал(а):

for(i=0;i<100;i++)

вместо i<100 надо писать i<strlen(s) :) Из-за этого и глючит, SkAlD прав.

SkAlD написал(а):

а нам строка нужна на выходе или нет???

Да нет, вроде бы...  :/

SkAlD написал(а):

а получить её можно так

Да, собственно это я и написал, вернее, хотел написать, но сделал сразу две ошибки...  :rolleyes:

SkAlD написал(а):

while (key != 10)

Все-таки key? Будем знать...  :yes:

0

60

SkAlD написал(а):

PS введи 100 символов и проверь подсчет суммы

Неа,выдает как и прежде-0!

Kit написал(а):

вместо i<100 надо писать i<strlen(s)  Из-за этого и глючит, SkAlD прав.

все равно глючит... :(

0


Вы здесь » Форум студентов МГУ Печати ФИТиМ ИТД » Архив » Информатика (Сессия. I семестр)