2014 dxdy logo

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

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




 
 Помогите решить на языке С
Сообщение13.12.2009, 17:28 
Выяснить, верно ли, что среди символов строки произвольной длины имеются все символы, входящие в слово ДЕНЬ.

 
 
 
 Re: Помогите решить на языке С
Сообщение13.12.2009, 18:43 
Помогите пожалуйста :(

 
 
 
 Re: Помогите решить на языке С
Сообщение13.12.2009, 20:10 
В каком месте проблема? Где свои попытки решения?

 
 
 
 Re: Помогите решить на языке С
Сообщение14.12.2009, 11:26 
Приведи свой код. Скажу где ошибки.

 
 
 
 Re: Помогите решить на языке С
Сообщение14.12.2009, 16:16 
Тут уже достаточно строк в теме. И в скольки же строках это верно?
Решение - берёшь и скачиваешь страницу форума любого и проверяешь, программно есстественно.

 
 
 
 Re: Помогите решить на языке С
Сообщение15.12.2009, 19:18 
#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 
Ну, например, вместо
Код:
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 
Обязательно ли на С? Можно ли на С++?

 
 
 
 Re: Помогите решить на языке С
Сообщение16.12.2009, 01:08 
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 
А можете мне ее поподробнее объяснить?

 
 
 
 Re: Помогите решить на языке С
Сообщение16.12.2009, 20:35 
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 
2snegok
Цитата:
А можете мне ее поподробнее объяснить?

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

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

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

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

 
 
 
 Re: Помогите решить на языке С
Сообщение21.12.2009, 15:14 
Подскажите пожалуйста как эту программу записать в виде динамического массива




#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 
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 ] 


Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group