2014 dxdy logo

Научный форум dxdy

Математика, Физика, Computer Science, Machine Learning, LaTeX, Механика и Техника, Химия,
Биология и Медицина, Экономика и Финансовая Математика, Гуманитарные науки




Начать новую тему Ответить на тему
 
 Помогите решить на языке С
Сообщение13.12.2009, 17:28 


13/12/09
6
Выяснить, верно ли, что среди символов строки произвольной длины имеются все символы, входящие в слово ДЕНЬ.

 Профиль  
                  
 
 Re: Помогите решить на языке С
Сообщение13.12.2009, 18:43 


13/12/09
6
Помогите пожалуйста :(

 Профиль  
                  
 
 Re: Помогите решить на языке С
Сообщение13.12.2009, 20:10 


06/04/09
156
Воронеж
В каком месте проблема? Где свои попытки решения?

 Профиль  
                  
 
 Re: Помогите решить на языке С
Сообщение14.12.2009, 11:26 


10/12/09
11
Приведи свой код. Скажу где ошибки.

 Профиль  
                  
 
 Re: Помогите решить на языке С
Сообщение14.12.2009, 16:16 


03/10/06
826
Тут уже достаточно строк в теме. И в скольки же строках это верно?
Решение - берёшь и скачиваешь страницу форума любого и проверяешь, программно есстественно.

 Профиль  
                  
 
 Re: Помогите решить на языке С
Сообщение15.12.2009, 19:18 


13/12/09
6
#include <stdio.h>
#include <stdlib.h>
#include <string.h>

/* определить, все ли символы из строки wrd есть в строке str */

int main(){
char *str = "Simple string to test this program";
char *wrd = "mine";
char *flags, *found, *pStr, *pWrd;
size_t wrd_len;
wrd_len = strlen(wrd);
if ( (flags = (char*)malloc(wrd_len)) == NULL ){
fprintf(stderr, "Not enough memory!\n");
exit(1);
}
memset((void*)flags, 0, wrd_len);

if ( (found = (char*)malloc(wrd_len)) == NULL ){
fprintf(stderr, "Not enough memory!\n");
exit(1);
}
memset((void*)found, 1, wrd_len);

for ( pStr = str; *pStr; pStr++ )
for ( pWrd = wrd; *pWrd; pWrd++ )
if ( *pStr == *pWrd )
flags[pWrd - wrd] = 1;

/* вывод */
if ( !memcmp((void*)flags, (void*)found, wrd_len) )
printf("All symbols of \"%s\" found in \"%s\"\n", wrd, str);
else
printf("String \"%s\" won't contain some symbols of \"%s\"\n", str, wrd);

free(flags);
flags = NULL;
free(found);
found = NULL;

exit(0);
}


найдите ошибку

 Профиль  
                  
 
 Re: Помогите решить на языке С
Сообщение15.12.2009, 19:45 
Заслуженный участник


04/05/09
4584
Ну, например, вместо
Код:
printf("All symbols of \"%s\" found in \"%s\"\n", wrd, str);
должно быть
Код:
printf("All symbols of \"%s\" are found in \"%s\"\n", wrd, str);

 Профиль  
                  
 
 Re: Помогите решить на языке С
Сообщение15.12.2009, 19:48 


11/12/09
25
Обязательно ли на С? Можно ли на С++?

 Профиль  
                  
 
 Re: Помогите решить на языке С
Сообщение16.12.2009, 01:08 


10/12/09
11
venco в сообщении #271773 писал(а):
Ну, например, вместо
Код:
printf("All symbols of \"%s\" found in \"%s\"\n", wrd, str);
должно быть
Код:
printf("All symbols of \"%s\" are found in \"%s\"\n", wrd, str);

:) Поддерживаю!

snegok, В коде ошибок нет, работает как часы.

 Профиль  
                  
 
 Re: Помогите решить на языке С
Сообщение16.12.2009, 19:31 


13/12/09
6
А можете мне ее поподробнее объяснить?

 Профиль  
                  
 
 Re: Помогите решить на языке С
Сообщение16.12.2009, 20:35 
Заслуженный участник


15/05/05
3445
USA
venco в сообщении #271773 писал(а):
должно быть
Код:
printf("All symbols of \"%s\" are found in \"%s\"\n", wrd, str);

Тогда уж лучше
Код:
printf("All characters from \"%s\" were found in \"%s\"\n", wrd, str);

 Профиль  
                  
 
 Re: Помогите решить на языке С
Сообщение16.12.2009, 21:39 
Заслуженный участник


26/07/09
1559
Алматы
2snegok
Цитата:
А можете мне ее поподробнее объяснить?

Дак вы её, что, не сами писали? :)

В общем здесь смысл такой. Заводится набор изначально сброшенных флажков. Затем производится посимвольное чтения входной строки и каждый её символ ищется в данном слове (в вашем случае, в слове "ДЕНЬ"), при успешном поиске поднимается флажок с номером, равным позиции найденного символа в слове (e.g., для символа Д индекс будет равен нулю, для символа Е -- единице, etc).

В самом конце формируется ответ задачи, равный истинности установки всех флажков.

 Профиль  
                  
 
 Re: Помогите решить на языке С
Сообщение16.12.2009, 23:14 


13/12/09
6
Спасибо!

 Профиль  
                  
 
 Re: Помогите решить на языке С
Сообщение21.12.2009, 15:14 


13/12/09
6
Подскажите пожалуйста как эту программу записать в виде динамического массива




#include <stdio.h>
#include <stdlib.h>
#include <time.h>

#define ROWS 5
#define COLS 4
#define MAXNUM 100

int main(){
int matr[ROWS][COLS];
int summ_rows[ROWS];
int i,j,summ;

srand(time(NULL));

/* заполнение массива случайными числами от 1 до MAXNUM */
for ( i = 0; i < ROWS; i++ )
for ( j = 0; j < COLS; j++ )
matr[i][j] = rand() % MAXNUM + 1;

/* вычисление сумм строк */
for ( i = 0; i < ROWS; i++ ) {
summ = 0;
for ( j = 0; j < COLS; j++ )
summ += matr[i][j];
summ_rows[i] = summ;
}

/* вывод */
for ( i = 0; i < ROWS; i++ ){
putchar('\n'); /* для наглядности */
for ( j = 0; j < COLS; j++ )
printf ( ( j < COLS - 1 ) ? "%d + " : "%d = ", matr[i][j]);
printf("%d\n", summ_rows[i]);
}

return 0;
}

 Профиль  
                  
 
 Re: Помогите решить на языке С
Сообщение22.12.2009, 00:30 
Заслуженный участник


26/07/09
1559
Алматы
2snegok
Цитата:
Подскажите пожалуйста как эту программу записать в виде динамического массива

В общем-то ответ на ваш вопрос уже содержится в ранее выложенном вами исходнике (про ДЕНЬ).

То есть вместо int matr[ROWS][COLS] вы должны написать что-то вроде:
Используется синтаксис C
#include <stdlib.h>

        ...

    int **matr;

    matr=(int**)malloc(ROWS*sizeof(int*));
    for(i=0; i<ROWS; i++)
        matr[i]=(int*)malloc(COLS*sizeof(int));
 

В этом примере матрица хранится как динамический массив строк (т.е., как указатель на тип строки, или, другими словами, как указатель на указатель на int), а каждая строка хранится как динамический массив целых чисел (т.е., как указатель на int).

Когда матрица станет ненужной освободите память так:
Используется синтаксис C
    for(i=0; i<ROWS; i++)
        free(matr[i]);
    free(matr);
 


P.S.: Пользуйтесь, пожалуйста, тегом code или syntax при оформлении публикуемых фрагментов кода.

 Профиль  
                  
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 15 ] 

Модераторы: Karan, Toucan, PAV, maxal, Супермодераторы



Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей


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

Найти:
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group