1 Востаннє редагувалося chygaistr (10.12.2014 12:37:07)

Тема: Допоможіть знайти помилку в коді С

Завдання: задана не порожня послідовність не порожніх слів із латинських букв; сусідні слова відділяються одне від одного комами, а в кінці крапка. Визначити слова, які закінчуються буквою w. Мій код в файлі

Post's attachments

Kod.txt 1.26 kb, 110 downloads since 2014-12-10 

2 Востаннє редагувалося koala (10.12.2014 12:27:35)

Re: Допоможіть знайти помилку в коді С

Теги code використовуйте. І описуйте, чому вважаєте, що там є помилка.
Так, і в 21-му рядку ви намагаєтеся прочитати ryadok[-1].
Ну і зрозумілі назви змінних на кшталт nastupne замість n теж додають якості коду (а ще краще next).
І ще подивіться на функцію strtok.

3

Re: Допоможіть знайти помилку в коді С

вас вчили писати коментарі в коді ?
не хвилюйтесь, з коментарями програма не стає більшою

- Поганому трояну фаєрвол заважає
- Ніколи не програмуйте та не пийте пиво
Якщо ви з першого разу написали програму, в якій немає жодної помилки, повідомте про це системного програмісту: він виправить помилки в компіляторі

4

Re: Допоможіть знайти помилку в коді С

reverse2500 написав:

вас вчили писати коментарі в коді ?
не хвилюйтесь, з коментарями програма не стає більшою

виправив

5

Re: Допоможіть знайти помилку в коді С

koala написав:

Теги code використовуйте. І описуйте, чому вважаєте, що там є помилка.
Так, і в 21-му рядку ви намагаєтеся прочитати ryadok[-1].
Ну і зрозумілі назви змінних на кшталт nastupne замість n теж додають якості коду (а ще краще next).
І ще подивіться на функцію strtok.

В мене не буде випадку, коли треба буде прочитати ryadok[-1], адже умова буде виконуватися тільки якщо елемент з індексом і буде комою, а нульовий елемент в моїй програмі не може дорівнювати комі, там завжди буде якась буква.

6 Востаннє редагувалося koala (10.12.2014 12:31:02)

Re: Допоможіть знайти помилку в коді С

chygaistr написав:
koala написав:

Теги code використовуйте. І описуйте, чому вважаєте, що там є помилка.
Так, і в 21-му рядку ви намагаєтеся прочитати ryadok[-1].
Ну і зрозумілі назви змінних на кшталт nastupne замість n теж додають якості коду (а ще краще next).
І ще подивіться на функцію strtok.

В мене не буде випадку, коли треба буде прочитати ryadok[-1], адже умова буде виконуватися тільки якщо елемент з індексом і буде комою, а нульовий елемент в моїй програмі не може дорівнювати комі, там завжди буде якась буква.

А що, правда, що з усіх зауважень ви бачите тільки одне?
Тим більше, що в

першому варіанті коду

int main()
{
    int i, n, b, m, c, q;
    char ryadok[30];
    char vidpovidi[30];
    n = 0;
    q = 0;
    b = 0;
    i = 0;
    m = 1;
    c = 1;
    printf("Vvedit' slova cherez komy\n");
    fgets(ryadok, 30, stdin);
    for (i = 0; i < 30; i++)
    {
        if (ryadok[i] == ',')
            b = i - n;
        m = n;
        n = i + 1;
        {
            if (ryadok[i - 1] == 'w')
            {
                for (q = 0; q < b; q++)
                {
                    ryadok[m] = vidpovidi[c];
                        c++;
                        m++;
                }
                vidpovidi[c] = ',';
                c++;
            }
        }
        if (ryadok[i] == '.')
            b = i - n;
        m = n;
        n = i + 1;
        {
            if (ryadok[i - 1] == 'w')
            {
                for (q = 0; q < b; q++)
                {
                    ryadok[m] = vidpovidi[c];
                        c++;
                        m++;
                }
                vidpovidi[c] = '.';
            }
        }
    }
    if (vidpovidi[c] == ',')
    {
        vidpovidi[c] = '.';
    }
    for (i = 0; i < 30; i++)
    {
        printf("%c", vidpovidi[i]);
    }
    return 0;
}

ця умова була трохи в іншому місці.

7

Re: Допоможіть знайти помилку в коді С

koala написав:
chygaistr написав:
koala написав:

Теги code використовуйте. І описуйте, чому вважаєте, що там є помилка.
Так, і в 21-му рядку ви намагаєтеся прочитати ryadok[-1].
Ну і зрозумілі назви змінних на кшталт nastupne замість n теж додають якості коду (а ще краще next).
І ще подивіться на функцію strtok.

В мене не буде випадку, коли треба буде прочитати ryadok[-1], адже умова буде виконуватися тільки якщо елемент з індексом і буде комою, а нульовий елемент в моїй програмі не може дорівнювати комі, там завжди буде якась буква.

А що, правда, що з усіх зауважень ви бачите тільки одне?

зараз виправлю

8

Re: Допоможіть знайти помилку в коді С

koala написав:

І описуйте, чому вважаєте, що там є помилка.

Певно, мені вже краще змінити тему на "Допоможіть скласти код", адже я не впевнений, що помилка в коді. Просто коли я перевіряв код, роблячи всі дії вручну, на листку, слідуючи командам, то у мене все виходило.

9

Re: Допоможіть знайти помилку в коді С

Якщо не маєте можливості встановити компілятор - користуйтеся онлайн-компіляторами, наприклад, ideone.com.
А у вас все зовсім неправильно вийшло. Наприклад, вас не насторожує, що тут

//Заповнення масиву відповідей
ryadok[m] = vidpovidi[c];

заповнюється не масив відповідей, а зовсім навпаки?
А ще можна ввести не 30 символів; і якщо більше, ніж 30, ще якось обробляться, то менше будуть докручуватися до 30 сміттям, бо всі цикли у вас до 30, а не до кінця рядка (strlen).

Подякували: chygaistr1

10

Re: Допоможіть знайти помилку в коді С

А ось вам те, що ви хотіли написати, але соромилися :) :

#include <stdio.h>

int main()
{
    int zaraz = 0,
        poperednye = 0,
        ostannye = 0;
    char ryadok[30];
    char vidpovidi[30];

    //Заповнюю масив словами
    printf("Vvedit' slova cherez komy\n");
    fgets(ryadok, 30, stdin);
    //Аналізую кожен елемент масиву
    for( zaraz = 0; zaraz < 30; ++zaraz )
    {
        if( ( ryadok[ zaraz ] == ',' ) || ( ryadok[ zaraz ] == '.' ) )
        {
          if( ryadok[ zaraz - 1 ] == 'w' )
      {
        while( poperednye <= zaraz )
        {
          vidpovidi[ ostannye++ ] = ryadok[ poperednye++ ];
        }
      }
      poperednye = zaraz + 1;
        }
        if( ryadok[ zaraz ] == '.')
      break;
    }
    //Ставлю в кінці крапку
    if (vidpovidi[ ostannye - 1 ] == ',')
    {
        vidpovidi[ ostannye - 1 ] = '.';
    }
    //Вивід відповіді на екран
    for (zaraz = 0; zaraz < 30; ++zaraz)
    {
        printf("%c", vidpovidi[ zaraz ]);
        if( vidpovidi[ zaraz ] == '.')
      break;
    }
    return 0;
}
Подякували: chygaistr1

11 Востаннє редагувалося chygaistr (10.12.2014 16:19:44)

Re: Допоможіть знайти помилку в коді С

koala написав:

А у вас все зовсім неправильно вийшло. Наприклад, вас не насторожує, що тут

//Заповнення масиву відповідей
ryadok[m] = vidpovidi[c];

заповнюється не масив відповідей, а зовсім навпаки?
А ще можна ввести не 30 символів; і якщо більше, ніж 30, ще якось обробляться, то менше будуть докручуватися до 30 сміттям, бо всі цикли у вас до 30, а не до кінця рядка (strlen).

Дуже дякую! Це те, що мені було потрібно)