Форум программистов, компьютерный форум CyberForum.ru

найти ошибку в коде - C++

Восстановить пароль Регистрация
 
den4ik_fpmi
1 / 1 / 1
Регистрация: 20.10.2012
Сообщений: 166
07.12.2012, 14:23     найти ошибку в коде #1
Дана непустая последовательность слов (не более 50), в каждом слове не более восьми символов. Слова разделены пробелом, за последним словом точка. Найти те слова, которые отличаются от последнего слова и длина слов максимальная.



C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
#include<stdio.h>
#include<string.h>
#include<locale.h>
#include<conio.h>
void main()
{setlocale(LC_CTYPE,"Russian");
int i,b,n,p,z;
char A[51][9], X[50][9];
printf_s("введите количество слов\n");
scanf_s("%d",&n);
for(i=0;i<n;i++)
{scanf_s("%s", &A[i]);}
for(i=0,b=0,p=0;i<n;i++)
{if (strcmp(A[i],A[n])!=0)
{z=strlen(A[i]);
if (z>p) {p=z;b=0;X[b]=A[i];b++;}
else {if (z==p) X[b]=A[i];b++;}}}
for(i=0;i<n;i++)
{printf_s("%s",&X[i]);}}
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
07.12.2012, 14:23     найти ошибку в коде
Посмотрите здесь:

C++ Найти ошибку в коде
C++ Найти ошибку в коде
Найти ошибку в коде C++
Найти ошибку в коде C++
Найти ошибку в коде C++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
sovaz1997
CEO SOVAZ Corp.
 Аватар для sovaz1997
379 / 225 / 2
Регистрация: 17.12.2011
Сообщений: 816
Записей в блоге: 1
07.12.2012, 15:52     найти ошибку в коде #2
C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
#include<stdio.h>
#include<string.h>
#include<locale.h>
#include<conio.h>
 
void main() {
    setlocale(LC_CTYPE,"Russian");
 
    int i, b, n, p, z;
 
    char A[51][9], X[50][9];
    printf_s("введите количество слов\n");
 
    scanf_s("%d",&n);
 
    for(i = 0; i < n; i++){
        scanf_s("%s", &A[i]);
    }
 
    for(i = 0, b = 0, p = 0; i < n; i++) {
        if (strcmp(A[i], A[n])!=0) {
            z = strlen(A[i]);
            if (z > p) {
                p = z;
                b = 0;
                X[b] = A[i];
                b++;
            }
 
            else {
                if (z == p) {
                    X[b] = A[i];
                    b++;
                }
            }
        }
    }
 
    for(i = 0; i < n; i++) {
        printf_s("%s",&X[i]);
    }
}
P.S. Можешь прокомментировать, что и как происходит в этом приличном коде?
den4ik_fpmi
1 / 1 / 1
Регистрация: 20.10.2012
Сообщений: 166
07.12.2012, 15:55  [ТС]     найти ошибку в коде #3
По сути программа должна искать слова отличные от последнего слова и чтобы длинна слова была максимальна
sovaz1997
CEO SOVAZ Corp.
 Аватар для sovaz1997
379 / 225 / 2
Регистрация: 17.12.2011
Сообщений: 816
Записей в блоге: 1
07.12.2012, 15:57     найти ошибку в коде #4
Еще раз. Ты можешь прокомментировать сам код. Мне не понятно i, b, n, p, z.

P.S. Переменные нужно называть понятным нам всем языком.
den4ik_fpmi
1 / 1 / 1
Регистрация: 20.10.2012
Сообщений: 166
07.12.2012, 16:03  [ТС]     найти ошибку в коде #5
i-это строки
b-строки массива куда записывается результат
n- количество слов
p-количество символов в слове
z-переменная значение которой присваивается мощность очередного слова
den4ik_fpmi
1 / 1 / 1
Регистрация: 20.10.2012
Сообщений: 166
07.12.2012, 16:05  [ТС]     найти ошибку в коде #6
еще вылазит такая ошибка
Миниатюры
найти ошибку в коде  
sovaz1997
CEO SOVAZ Corp.
 Аватар для sovaz1997
379 / 225 / 2
Регистрация: 17.12.2011
Сообщений: 816
Записей в блоге: 1
07.12.2012, 16:11     найти ошибку в коде #7
У меня то же самое. Попробую найти.

Добавлено через 2 минуты
Вообще, я программирую на C++. Поэтому мне сложно разобраться в этом коде без комментариев. Жду комментированный код.....
den4ik_fpmi
1 / 1 / 1
Регистрация: 20.10.2012
Сообщений: 166
07.12.2012, 20:50  [ТС]     найти ошибку в коде #8
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
#include<stdio.h>
#include<string.h>
#include<locale.h>
#include<conio.h>
void main()
{setlocale(LC_CTYPE,"Russian");
int i,b,n,p,z;//i-количество строк, т.е. слов; b-количество слов, т.е. строк в результирующем массиве;
//n-количество слов; p-количество символов в слове; z-переменная для определения количества элементов в слове
char A[51][9], X[50][9];//массив А со словами, Х массив с результатом
printf_s("введите количество слов\n");
scanf_s("%d",&n);
//ввод массива А
for(i=0;i<n;i++)
{scanf_s("%s", &A[i]);}
//цикл для просмотра всех слов
for(i=0,b=0,p=0;i<n;i++)
{if (strcmp(A[i],A[n])!=0)//лексикографическое сравнение i-го слова с последним словом
{z=strlen(A[i]);//вычисление количества элементов в слове
if (z>p) {p=z;b=0;X[b]=A[i];b++;}//поверка является ли p максимальной мощностью слова, если нет то присвоить максисмальной мощности
//значение мощности i-го слова и запись этого слова в результат
else {if (z==p) X[b]=A[i];b++;}}}// если максимальная мощность равна мощности i-го слова то записываем результат
for(i=0;i<n;i++)//выдаем результат
{printf_s("%s",&X[i]);}}
sovaz1997
CEO SOVAZ Corp.
 Аватар для sovaz1997
379 / 225 / 2
Регистрация: 17.12.2011
Сообщений: 816
Записей в блоге: 1
07.12.2012, 21:02     найти ошибку в коде #9
Вырезано
Croessmah
Модератор
Эксперт С++
 Аватар для Croessmah
11837 / 6816 / 771
Регистрация: 27.09.2012
Сообщений: 16,908
Записей в блоге: 2
Завершенные тесты: 1
07.12.2012, 21:02     найти ошибку в коде #10
den4ik_fpmi, у Вас в коде целая куча ошибок. А если код еще и отформатировать, то думаю еще больше сразу же вылезет.
den4ik_fpmi
1 / 1 / 1
Регистрация: 20.10.2012
Сообщений: 166
08.12.2012, 10:07  [ТС]     найти ошибку в коде #11
а можешь подсказать как тут реализовать ввод?? с копированием одной строки в другую разобрался, теперь ввод не знаю как сделать

Добавлено через 11 часов 51 минуту
можешь исправить? мне просто его уже в понедельник сдавать
ValeryS
Модератор
6377 / 4843 / 442
Регистрация: 14.02.2011
Сообщений: 16,048
08.12.2012, 10:21     найти ошибку в коде #12
Цитата Сообщение от den4ik_fpmi Посмотреть сообщение
strcmp(A[i],A[n])!=0)//лексикографическое сравнение i-го слова с последним словом
A[n] какое слово лежит????
если учесть что
Цитата Сообщение от den4ik_fpmi Посмотреть сообщение
for(i=0;i<n;i++)
{scanf_s("%s", &A[i]);}
последнее введенное слово лежит в A[n-1]
а если n =51 то вообще выход за границы массива
den4ik_fpmi
1 / 1 / 1
Регистрация: 20.10.2012
Сообщений: 166
08.12.2012, 10:28  [ТС]     найти ошибку в коде #13
а можно ли так организовать ввод как сделал я, просто когда я ввожу n, то у меня получается я ввожу количество символов а не количество слов
den4ik_fpmi
1 / 1 / 1
Регистрация: 20.10.2012
Сообщений: 166
09.12.2012, 11:01  [ТС]     найти ошибку в коде #14
Croessmah, можешь исправить ошибки?? мне в понедельник уже сдавать а че делать не знаю
den4ik_fpmi
1 / 1 / 1
Регистрация: 20.10.2012
Сообщений: 166
09.12.2012, 15:22  [ТС]     найти ошибку в коде #15
Вот код, вроде все уже нормально, а при вводе выдает какую то неведомую фигню (смотри скрин)

C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
#include<stdio.h>
#include<string.h>
#include<locale.h>
#include<conio.h>
void main()
{setlocale(LC_CTYPE,"Russian");
int i=0,b,n,p,z,j;
char A[50][9], X[49][9];
printf_s("введите количество слов\n");
scanf_s("%d",&n);
printf("введите последовательность из %d слов\n",n);
while(i<n)
{scanf_s("%s", &A[i]);
i++;}
for(b=0,p=0;i<n;i++)
{if (strcmp(A[i],A[n-1])!=0)
z=strlen(A[i]);
if (z>p) {p=z;b=0;strcpy_s(X[b],A[i]);b++;}
else {if (z==p) strcpy_s(X[b],A[i]);b++;}}
for(b=0;b<n;b++)
{printf_s("%s",X[b]);}
_getch();}
Миниатюры
найти ошибку в коде   найти ошибку в коде  
ValeryS
Модератор
6377 / 4843 / 442
Регистрация: 14.02.2011
Сообщений: 16,048
09.12.2012, 15:32     найти ошибку в коде #16
Цитата Сообщение от den4ik_fpmi Посмотреть сообщение
i++;}
for(b=0,p=0;i<n;i++)
вот здесь в цикле i будет равна n следовательно в цикл не войдем
den4ik_fpmi
1 / 1 / 1
Регистрация: 20.10.2012
Сообщений: 166
09.12.2012, 15:34  [ТС]     найти ошибку в коде #17
ValeryS, нужно обнулить i перед циклом?
ValeryS
Модератор
6377 / 4843 / 442
Регистрация: 14.02.2011
Сообщений: 16,048
09.12.2012, 15:36     найти ошибку в коде #18
Цитата Сообщение от den4ik_fpmi Посмотреть сообщение
ValeryS, нужно обнулить i перед циклом?
разумеется
den4ik_fpmi
1 / 1 / 1
Регистрация: 20.10.2012
Сообщений: 166
09.12.2012, 15:36  [ТС]     найти ошибку в коде #19
ValeryS, сделал, все равно то же самое
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
10.12.2012, 13:56     найти ошибку в коде
Еще ссылки по теме:

C++ Найти ошибку в коде
Найти ошибку в коде C++
Найти ошибку в коде C++

Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
den4ik_fpmi
1 / 1 / 1
Регистрация: 20.10.2012
Сообщений: 166
10.12.2012, 13:56  [ТС]     найти ошибку в коде #20
kura007, чет ты не в тему написал, создай отдельную тему

Добавлено через 22 часа 12 минут
Тема закрыта, нашел решение, выложу поди пригодиться кому
C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
#include<stdio.h>
#include<conio.h>
#include<string.h>
#include<locale.h>
void main()
{setlocale(LC_CTYPE,"Russian");
int i,b,n,p,z;
char A[50][9], X[50][9],k;
printf("введи последовательность слов\n");
k='1';
for(n=0;(k!='.');n++)
{scanf("%[^ .]",&A[n]);
 k=getchar();}
p=strlen(A[0]);
for(i=0,b=0;i<n;i++)
{z=strlen(A[i]);
 if (strcmp(A[i],A[n-1])!=0)
 {if (z>p) 
 {p=z;
  b=0;
  strcpy(X[b],A[i]);b++;}
 else 
 {if (p==z) {strcpy(X[b],A[i]);
  b++;}}}}
if (b==0) printf("таких слов нет\n");
else
 printf("слово(-а) максимальной длинны и отличные от последнего\n");
 for(i=0;i<b;i++)
{printf("%s ",X[i]);}
Yandex
Объявления
10.12.2012, 13:56     найти ошибку в коде
Ответ Создать тему
Опции темы

Текущее время: 14:32. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru