Консультация № 177893
17.04.2010, 15:01
0.00 руб.
0 27 1
[b]Доброго времени суток дорогие эксперты! [/b]

помогите пожалуйста решить парочку задач на Турбо СИ!
Платформа Windows Vista home premium

1)Даны две строки. Пусть n1 – число слов в первой строке, а n2 – во второй (n1< n2). Добавить в конец первой строки последние n2-n1 слов второй строки.

Приложение к решению:
Предполагается, что длина вводимого текста ограничена константой. Длины слов предложения также ограничены константой. Стандартными строковыми функциями, объявленными в файле string.h, пользоваться не разрешается.

2)Дан массив квадратных матриц. Определить число матриц, строки которых упорядочены по невозрастанию элементов.

Приложение к решению:
составить программу для решения задачи для каждого из следующих случаев задания матрицы:
а) число строк и число столбцов - константы;
б) число строк - константа, а число столбцов - исходное данное;
в) число строк - исходное данное, число столбцов - константа;
г) число строк и число столбцов - исходные данные.
Ввод, вывод и обработку матрицы описать отдельными функциями. Для случаев a) - г), где возможно, использовать одни и те же функции

Обсуждение

давно
Академик
320937
2216
21.04.2010, 08:51
общий
Юдин Евгений Сергеевич:
Доброе утро! Вопросы к первой задаче. Дано
Код:

строка1="папа у Васи силен в математике учится"
строка2="папа за Васю весь год где это видано где это слыхано"

как должна выглядеть первая строка после требуемой операции:
Код:

1) "папа у Васи силен в математике учится видано где это слыхано"
2) "папа у Васи силен в математике учится видано где это слыхано"
3) "папа у Васи силен в математике учитсявиданогдеэтослыхано"

Перенесите, пожалуйста, вопрос 2 отдельным вопросом. Он никак не связан с первым.
Неизвестный
21.04.2010, 16:31
общий
1) должно быть как " папа у васи силен в математике учиться где это слыхано"
2) в ближайщее время вынесу в отдельный вопрос(задачи разные 1я на свободные массивы строк)
давно
Академик
320937
2216
21.04.2010, 16:43
общий
Юдин Евгений Сергеевич:
Еще вопрос. Мы изначально считаем, что количество слов n2>n1 и что нужная часть второй строки допишется в первую, то есть проверку не производим. Так?
давно
Академик
320937
2216
21.04.2010, 22:03
общий
Юдин Евгений Сергеевич:
Посмотрите это. Так ли понят вопрос? Есть какие-то замечания?
Код:
#include <stdio.h>
#include <stdlib.h>
int main()
{
enum {str_len=80};
enum {false, true};
int words; /* число слов */
int i, j;
int in_word;

char s1[str_len+1]; /* первая строка */
char s2[str_len+1]; /* вторая строка */

/* читаем первую строку */
printf("s1=");
for (i=0; i<str_len && (s1[i]=getchar())!=EOF && s1[i]!='\n'; i++)
;
s1[i]='\0';

/* читаем вторую строку */
printf("s2=");
for (i=0; i<str_len && (s2[i]=getchar())!=EOF && s2[i]!='\n'; i++)
;
s2[i]='\0';

/* считаем длину и количество слов в первой строке */
words = 0;
i=0;
in_word = 0;
while (s1[i])
{
if (in_word && s1[i]==' ')
{
in_word = false;
words++;
}
else if (!in_word && s1[i]!=' ')
in_word = true;
i++;
}
if (in_word)
words++;

/* пропускаем words слов во второй строке */
j=0;
in_word = 0;
while (s2[j] && words>0)
{
if (in_word && s2[j]==' ')
{
in_word = false;
words--;
}
else if (s2[j]!=' ')
in_word = true;
j++;
}

/* если первая строка заканчивается не пробелом, вставим его */
if (s1[i-1]!=' ')
s1[i++]=' ';

while (s2[j])
{
if (s2[j]!=' ')
{ /* вставляем непробельный символ */
in_word = true;
s1[i++]=s2[j];
}
else if (in_word)
{ /* вставляем только первый из серии пробелов */
in_word = false;
s1[i++]=s2[j];
}
j++;
} s1[i]='\0';

printf("s1=%s\n",s1);
system("pause");
return 0;
}

давно
Академик
320937
2216
22.04.2010, 09:27
общий
это ответ
Здравствуйте, Юдин Евгений Сергеевич. Ответ на первый вопрос в приложении. Длина слова не используется. TurboC 2.0


Приложение:
#include <stdio.h>
#include <stdlib.h>
int main()
{
enum {str_len=80};
enum {false, true};
int words; /* число слов */
int i, j;
int in_word;

char s1[str_len+1]; /* первая строка */
char s2[str_len+1]; /* вторая строка */

/* читаем первую строку */
printf("s1=");
for (i=0; i<str_len && (s1[i]=getchar())!=EOF && s1[i]!='\n'; i++)
;
s1[i]='\0';

/* читаем вторую строку */
printf("s2=");
for (i=0; i<str_len && (s2[i]=getchar())!=EOF && s2[i]!='\n'; i++)
;
s2[i]='\0';

/* считаем длину и количество слов в первой строке */
words = 0;
i=0;
in_word = 0;
while (s1[i])
{
if (in_word && s1[i]==' ')
{
in_word = false;
words++;
}
else if (!in_word && s1[i]!=' ')
in_word = true;
i++;
}
if (in_word)
words++;

/* пропускаем words слов во второй строке */
j=0;
in_word = 0;
while (s2[j] && words>0)
{
if (in_word && s2[j]==' ')
{
in_word = false;
words--;
}
else if (s2[j]!=' ')
in_word = true;
j++;
}

/* если первая строка заканчивается не пробелом, вставим его */
if (s1[i-1]!=' ')
s1[i++]=' ';

while (s2[j])
{
if (s2[j]!=' ')
{ /* вставляем непробельный символ */
in_word = true;
s1[i++]=s2[j];
}
else if (in_word)
{ /* вставляем только первый из серии пробелов */
in_word = false;
s1[i++]=s2[j];
}
j++;
} s1[i]='\0';

printf("s1=%s\n",s1);
system("pause");
return 0;
}
Неизвестный
23.04.2010, 14:51
общий
замечания есть..... код на code block не работает и выдает это

\main.c||In function `int main()':|
\main.c|6|error: expected identifier before "false"|
\main.c|6|error: expected `}' before "false"|
\main.c|6|error: expected unqualified-id before "false"|
\main.c|11|error: `str_len' was not declared in this scope|
\main.c|12|error: `str_len' was not declared in this scope|
\main.c|15|error: expected constructor, destructor, or type conversion before '(' token|
\main.c|16|error: expected unqualified-id before "for"|
\main.c|16|error: expected constructor, destructor, or type conversion before '<' token|
\main.c|16|error: expected constructor, destructor, or type conversion before '++' token|
\main.c|18|error: expected constructor, destructor, or type conversion before '=' token|
\main.c|21|error: expected constructor, destructor, or type conversion before '(' token|
\main.c|22|error: expected unqualified-id before "for"|
\main.c|22|error: expected constructor, destructor, or type conversion before '<' token|
\main.c|22|error: expected constructor, destructor, or type conversion before '++' token|
\main.c|24|error: expected constructor, destructor, or type conversion before '=' token|
\main.c|27|error: expected constructor, destructor, or type conversion before '=' token|
\main.c|28|error: expected constructor, destructor, or type conversion before '=' token|
\main.c|29|error: expected constructor, destructor, or type conversion before '=' token|
\main.c|30|error: expected unqualified-id before "while"|
\main.c|41|error: expected unqualified-id before "if"|
\main.c|45|error: expected constructor, destructor, or type conversion before '=' token|
\main.c|46|error: expected constructor, destructor, or type conversion before '=' token|
\main.c|47|error: expected unqualified-id before "while"|
\main.c|60|error: expected unqualified-id before "if"|
\main.c|63|error: expected unqualified-id before "while"|
\main.c|76|error: expected constructor, destructor, or type conversion before '=' token|
\main.c|78|error: expected constructor, destructor, or type conversion before '(' token|
\main.c|79|error: expected constructor, destructor, or type conversion before '(' token|
\main.c|80|error: expected unqualified-id before "return"|
\main.c|81|error: expected declaration before '}' token|
||=== Build finished: 30 errors, 0 warnings ===|
давно
Академик
320937
2216
23.04.2010, 15:22
общий
Юдин Евгений Сергеевич:
Только что скопировал код со своего ответа, скриншот здесь
. Возможные варианты.
1. Выложите Ваш исходник (может быть, что-то неверно скопировали)
2. Какой транслятор используете? CodeBlocks всего-то среда.
давно
Академик
320937
2216
23.04.2010, 15:29
общий
Юдин Евгений Сергеевич:
Возможно, вместо левой фигурной скобки Вы поставили круглую перед false. Примерно такое сообщение и появится.
Неизвестный
23.04.2010, 15:44
общий


вот....фигурные скобки на месте а такую муру дает
Неизвестный
23.04.2010, 15:53
общий
просто на трубо си 3.0 работает
давно
Академик
320937
2216
23.04.2010, 15:55
общий
Юдин Евгений Сергеевич:
Выкладывайте свой исходник в мини-форум.
давно
Академик
320937
2216
23.04.2010, 15:56
общий
Юдин Евгений Сергеевич:
На какой транслятор настроен CodeBlocks?
Неизвестный
23.04.2010, 16:01
общий
Цитата: lamed
Юдин Евгений Сергеевич:
На какой транслятор настроен CodeBlocks?


честно не знаю я этово....я его просто поставил и всё...
Неизвестный
23.04.2010, 16:05
общий
#include <stdio.h>
#include <stdlib.h>
int main()
{
enum {str_len=80};
enum {false, true};
int words; /* число слов */
int i, j;
int in_word;

char s1[str_len+1]; /* первая строка */
char s2[str_len+1]; /* вторая строка */

/* читаем первую строку */
printf("s1=");
for (i=0; i<str_len && (s1[i]=getchar())!=EOF && s1[i]!='\n'; i++)
;
s1[i]='\0';

/* читаем вторую строку */
printf("s2=");
for (i=0; i<str_len && (s2[i]=getchar())!=EOF && s2[i]!='\n'; i++)
;
s2[i]='\0';

/* считаем длину и количество слов в первой строке */
words = 0;
i=0;
in_word = 0;
while (s1[i])
{
if (in_word && s1[i]==' ')
{
in_word = false;
words++;
}
else if (!in_word && s1[i]!=' ')
in_word = true;
i++;
}
if (in_word)
words++;

/* пропускаем words слов во второй строке */
j=0;
in_word = 0;
while (s2[j] && words>0)
{
if (in_word && s2[j]==' ')
{
in_word = false;
words--;
}
else if (s2[j]!=' ')
in_word = true;
j++;
}

/* если первая строка заканчивается не пробелом, вставим его */
if (s1[i-1]!=' ')
s1[i++]=' ';

while (s2[j])
{
if (s2[j]!=' ')
{ /* вставляем непробельный символ */
in_word = true;
s1[i++]=s2[j];
}
else if (in_word)
{ /* вставляем только первый из серии пробелов */
in_word = false;
s1[i++]=s2[j];
}
j++;
} s1[i]='\0';

printf("s1=%s\n",s1);
system("pause");
return 0;
}
давно
Академик
320937
2216
23.04.2010, 16:18
общий
Юдин Евгений Сергеевич:
Вы скопировали верно. Транслируется без ошибок.
Попробуйте вместо
Код:
enum {false, true};

поставить
Код:

const int false=0;
const int true=1;

Неизвестный
23.04.2010, 16:23
общий
теперь вот это дает


\main.c||In function `int main()':|
\main.c|6|error: expected unqualified-id before "false"|
\main.c|7|error: expected unqualified-id before "true"|
||=== Build finished: 2 errors, 0 warnings ===|
давно
Академик
320937
2216
23.04.2010, 16:27
общий
Юдин Евгений Сергеевич:
Хорошо, допустим, напишем const int FALSE; const int TRUE;
Неизвестный
23.04.2010, 16:31
общий
по моему я просто какой то проблемный пользователь.... вот что выдает

\main.c||In function `int main()':|
\main.c|6|error: uninitialized const `FALSE'|
\main.c|7|error: uninitialized const `TRUE'|
||=== Build finished: 2 errors, 0 warnings ===|
давно
Академик
320937
2216
23.04.2010, 16:33
общий
Юдин Евгений Сергеевич:
Тогда классика:
перед int main()
Код:

#define str_len 80
#define false 0
#define true 1
Вместо всех enum-ов.
Неизвестный
23.04.2010, 16:37
общий
Класики самое то... спасибо Lamed за ваш нелегкий труд.. а вы 4 рассмотрите?
давно
Академик
320937
2216
23.04.2010, 16:40
общий
Юдин Евгений Сергеевич:
Дан массив квадратных матриц. Определить число матриц, строки которых упорядочены по невозрастанию элементов.?
Неизвестный
23.04.2010, 16:45
общий
2)Дан массив квадратных матриц. Определить число матриц, строки которых упорядочены по невозрастанию элементов.
Приложение к решению: составить программу для решения задачи для каждого из следующих случаев задания матрицы:
а) число строк и число столбцов - константы;
б) число строк - константа, а число столбцов - исходное данное;
в) число строк - исходное данное, число столбцов - константа;
г) число строк и число столбцов - исходные данные.
Ввод, вывод и обработку матрицы описать отдельными функциями. Для случаев a) - г), где возможно, использовать одни и те же функции


вернее это
Неизвестный
23.04.2010, 16:45
общий
оно самое
давно
Академик
320937
2216
23.04.2010, 16:47
общий
Юдин Евгений Сергеевич:
Запросто. Уже начал. Только кладите в новый вопрос. Правила такие. Это совершенно разные, не связанные программы.
Неизвестный
23.04.2010, 16:51
общий
хорошо сделаю Lamed
давно
Академик
320937
2216
23.04.2010, 16:58
общий
Юдин Евгений Сергеевич:
Удачи! И разберитесь с Вашими трансляторами. Возможно, у Вас их слишком много установлено.
Неизвестный
23.04.2010, 17:01
общий
таких никогда не было проблем Lamed! компьютер чистый и тока код блок и Turbo C 3.0 стоит все
Форма ответа