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

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

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

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


Вы здесь » Форум студентов МГУ Печати ФИТиМ ИТД » Семестр » Вопросы к Сергею Юрьевичу (по информатике)


Вопросы к Сергею Юрьевичу (по информатике)

Сообщений 1 страница 20 из 53

1

Сергей Юрьич,я слегка не в тему...но Вы не моги бы глянуть программку мою-у меня косячок в ней.. точнее-в ф-ии ввода не корректно работает scanf для текста.
http://ifolder.ru/1435352 - вот здесь программка.... :(

0

2

Кузя, чтоб всё работало, исправьте функцию vvod следующим образом:

void vvod(struct knigi *baz,int i)
{
    char temp[2];
    printf("vvedite nomer stranicy: ");
    scanf("%d",&baz[i].nomer_stranicy);
    printf("vvedite nomer stroki: ");
    scanf("%d",&baz[i].nomer_stroki);
    printf("vvedite tekst: ");
    gets(temp);
    gets(baz[i].text);
    printf("vvedite datu:\n");
    printf("den: ");
    scanf("%d",&baz[i].dd);
    printf("mesyac: ");
    scanf("%d",&baz[i].mm);
    printf("god: ");
    scanf("%d",&baz[i].gg);
    baz[i].flag=1;
}

Ваш вариант не работал, потому что scanf не умеет считывать текстовые строки, содержащие пробелы.
(Финт со строкой temp нужен, чтобы "погасить" перевод строки, оставшийся во входном буфере после ввода номера строки.)

0

3

Сергей Юрьич,СПАСИБО! :dance:

0

4

Сергей Юрьич,можно еще вопрос. Как не смешно у меня проблемы с ф-ией очистки! :D  Короче после применения очистки,ввод данных выдает-нет свободных элементов.... :cool2:

0

5

Кузя, функция очистки у Вас работает правильно, а сообщение 'net svobodnyh' выдаётся вот почему:
когда база пуста, функция poisk_svobodnogo выдаёт 0, потому что нулевая запись - свободна.
То есть в качестве кода ошибки Вам надо использовать не 0, а, например, -1:

int poisk_svobodnogo(struct knigi *baz)
{
    int i;
    for(i=0;i<N;i++)
    {
        if(baz[i].flag==0)
            return i;
    }
    return -1;
}

Ну и, соответственно, нужно изменить фрагмент кода,
из которого функция poisk_svobodnogo вызывается:

for(int i=0;i<N;i++)
{
    sv=poisk_svobodnogo(baz);
    if(sv!=-1)
    ...

P.S. Кстати, я нашёл ещё несколько ошибок в Вашем коде.
Все функции вида poisk_min_blah_blah_blah начинаются со строки:
    int i,min=baz[0].blah_blah_blah,a=0;
Если нулевая запись свободна (baz[0].flag равно 0), то эта строчка будет работать неправильно!

Отредактировано Скоробогатов (2007-03-24 13:38:42)

0

6

хм...
а если так?

int poisk_min_stranicy(struct knigi *baz)
{
int i,j=0;
for(i=0;i<N;i++)
{
    if(baz[i].flag==1)
    {
    j=i;
    break;
    }
}
int min=baz[j].nomer_stranicy,a=0;
for(i=j+1;i<N;i++)
{
    if(baz[i].nomer_stranicy<min && baz[i].flag!=0)
    {
    min=baz[i].nomer_stranicy;
    a=i;

    }
}
return a;
}

0

7

Если так, то лучше, но если в базе все записи пустые, то функция будет возвращать 0.

0

8

Сергей Юрьич,у меня подскажите где у меня в алгоритме ошибка?  :cray:

http://www.filemaster.ru/files/c0162

Отредактировано Кузя (2007-04-07 10:27:09)

0

9

Задаем вопросы по информатике к Скоробогатову С.Ю. здесь.

0

10

Тима,специально для меня? Как приятно! Одна я кажется мучаю СЮ постоянно на форуме с вопросами по прогам ^_^

0

11

Тима,специально для меня? Как приятно!

^_^

P.S.

Одна я кажется мучаю СЮ

СЮ - прям как Салават Юлаев  ^_^  :P

0

12

Сергей Юрьевич, я насчет домашней задачи, мне надо удалить из строки слова, из длин которых нельзя образовать последовательность Фибоначчи. Вот если у меня 3 слова длиной 1, мне все 3 слова копировать или одно все-таки удалять?

0

13

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

Вот если у меня 3 слова длиной 1, мне все 3 слова копировать или одно все-таки удалять?

Одно - удалять.
И если у Вас два или больше слов длиной 2 (или 3, или 5, или 8), то тоже лишние надо удалять.
Какие именно - сами решайте.

0

14

это не честно....  :(

Отредактировано ProfRog (2007-04-08 19:46:18)

0

15

Если кто-то не купил книгу по информатике Кернигана и Ритчи,то вот ссылочка на её электронный вариант!
http://chaos.ssu.runnet.ru/cyr/KOI/book … atalog.htm

0

16

Сергей Юрьевич, можете по пунктам изложить процесс отладки программы...

0

17

Ой, а не могли бы Вы задать вопрос более конкретно?

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

0

18

Ну то, что Вы мне показывали, с помощью breakpoint, по шагам смотреть, как работает программа, я наверное не в том порядке это делаю, на любом шаге переменные равны мусору(

0

19

Домашняя задача №20
Составить программу, осуществляющую ввод с клавиатуры двух предложений и формирующую новое предложение, в котором слова, взятые из введенных с клавиатуры предложений, чередуются. Считать, что слова разделяются пробелами. Если в одном из предложений слов больше, чем в другом, то лишние слова в результирующее предложение не попадают. Например, если пользователь вводит предложения "Alpha Beta Gamma" и "A B C D E", программа должна выводить на экран "Alpha A Beta B Gamma C".

#include "stdafx.h"
#include <string.h>

int max(int x, int y)
{
    if(x>y || x==y)
        return x;
    else
        return y;
}

int min(int x, int y)
{
    if(x<y || x==y)
        return x;
    else
        return y;
}

void f(char s[100],char d[100])
{
    char rez[200];
    int i=-1, j=-1, z=-1, k, n=0, m=0;

    for(k=0;k<max(strlen(s),strlen(d));k++)
    {
        if(s[k]==' ')
            n++;
        if(d[k]==' ')
            m++;
    }

    for(k=0;k<min(n,m)+1;k++)
    {
        do
            rez[z++]=s[i++];
        while(s[i]!=' ' || s[i+1]!=0);

        if(s[i++] == 0)
            rez[z++]=' ';

        do
            rez[z++]=d[j++];
        while(d[j]!=' ' || d[j+1]!=0);
    }

    if(d[j++] == 0)
        rez[z++]=0;

    rez[z]=0;

    printf(rez);
    printf("\n");
}

int main(void)
{
    char s[100], d[100];

    printf("Vvedite 1 predlogenie:\n");
    gets(s);

    printf("Vvedite 2 predlogenie:\n");
    gets(d);

    f(s,d);

    return 0;
}

Компилируется, но НЕ работает :cray:

0

20

Wombat, попробую посмотреть завтра.
Сегодня, увы, некогда :-(

0


Вы здесь » Форум студентов МГУ Печати ФИТиМ ИТД » Семестр » Вопросы к Сергею Юрьевичу (по информатике)