Форум программистов, компьютерный форум, киберфорум
C для начинающих
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.50/4: Рейтинг темы: голосов - 4, средняя оценка - 4.50
0 / 0 / 0
Регистрация: 01.12.2013
Сообщений: 5
1

Написать программу, которая ищет в словаре слово, указанное там же

20.05.2014, 22:53. Просмотров 811. Ответов 3
Метки нет (Все метки)

Словарь организован в виде файла, содержащего по одному слову в строке, словарь упорядочен по убыванию(у меня пока по возрастанию). Написать программу, которая ищет в словаре слово, указанное там же. Для поиска интерполяционный метод. Запрещается считывать из словаря в память более одного слова одновременно.

Не понимаю, как реализовать этот поиск для слов. Так как для цифр-не получится, там нужно знать цифровое значение, которое лежит в массиве цифр. Попыталась через код буквы. Сортировать по каждой букве(сейчас пока только для одной). Брать её код и подставлять там в формулу. Но не получается. fseek тоже как-то странно работает. Видимо я что-то не так делаю.

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
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
// tanya_rgr3.cpp: определяет точку входа для консольного приложения.
//
 
#include "stdafx.h"
#include <string.h>
int sort(char*filename, char*key, int n, int size_w);
int vvod(char* filename, int &n);
 
int _tmain(int argc, _TCHAR* argv[])
{
    int n = 0;
    char filename[] = "in.txt";
    int size_w = vvod(filename, n);
    char key[] = "g";
    int z=sort(filename, key, n, size_w);
    printf("%d", z);
    return 0;
}
 
int vvod(char* filename, int &n)
{
    FILE*in;
    in = fopen(filename, "rt");
    char temp[20];
    fscanf(in, "%s", temp);
    int i = 1;
    int size_w = strlen(temp);
    while (!feof(in))
    {
        fscanf(in, "%s", temp);
        i++;
    }
    n = i - 1;
    printf("%d\n", n);
    fclose(in);
    return size_w;
}
 
int sort(char*filename, char*key, int n, int size_w)
{
    FILE*in;
    in = fopen(filename, "rt");
    int*a = new int[size_w];
    int*right = new int[size_w];
    int*left = new int[size_w];
    int*mid = new int[size_w];
    int l, r, m;
    int count = 0;//количество удачно найденных букв
    char*temp = new char[size_w];
    for (int j = 0; j < size_w; j++)
    {
        a[j] = key[j];
        //printf("%d ", b[j]);
    }
 
    for (int i = 0; i < size_w; i++)
    {
        l = 0;
        r = n - 1;
        fseek(in, 0, SEEK_SET);
        fscanf(in, "%s", temp);
        left[i] = temp[i];
        rewind(in);
        fseek(in, r*sizeof(temp), SEEK_SET);
        int l=fscanf(in, "%s", temp);
        right[i] = temp[i];
        rewind(in);
        while (left[i] <= a[i] && a[i] <= right[i])
        {
            m = l + (a[i] - left[i]) / (right[i] - left[i])*(r - l);
                fseek(in, m*(sizeof(temp)), SEEK_SET);
                fscanf(in, "%s", temp);
                    if (temp[i] == a[i]) count++;
                    if (temp[i] < a[i])
                    {
                        l = m + 1;
                        fseek(in, l*(sizeof(temp)), SEEK_SET);
                        fscanf(in, "%s", temp);
                        left[i] = temp[i];
                    }
                    else
                    {
                        r = m + 1;
                        fseek(in, l*(sizeof(temp)), SEEK_SET);
                        fscanf(in, "%s", temp);
                        right[i] = temp[i];
                    }
            rewind(in);
        }
        fseek(in, l*(sizeof(temp)), SEEK_SET);
        fscanf(in, "%s", temp);
            if (temp[i] == a[i]) count++;
                else return -1;
    }
    return count;
}
 
/*interpolationSearch(n, x):
  l = 0; // левая граница поиска (будем считать, что элементы массива нумеруются с нуля)
  r = n - 1; // правая граница поиска
 
  while a[l] <= x && x <= a[r]
    m = l + (x - a[l]) / (a[r] - a[l]) * (r - l); // элемент, с которым будем проводить сравнение
    if a[m] == x
      result = m;
    if a[m] < x
      l = m + 1;
    else
      r = m - 1;
 
  if a[l] == x
    result = l;
  else
  result = -1; // not found*/
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
20.05.2014, 22:53
Ответы с готовыми решениями:

Написать программу которая ищет слово с наибольшим количеством гласных букв
Есть код программы которая просто считает количество гласных ,которые введены в одну строку ,нужно...

Написать функцию которая ищет последнее слово в строке(заканчивается пробелом)
надо написать ф-ю которая ищет последнее слово в строке(заканчивается пробелом). я написал, но не...

Написать программу, подсчитывающую, сколько раз в предложении встречается указанное слово
Написать программу, подсчитывающую, сколько раз в предложении встречается указанное слово.

Написать программу, подсчитывающую, сколько раз в предложении встречается указанное слово
Написать программу, подсчитывающую, сколько раз в предложении встречается указанное слово....

3
61 / 62 / 11
Регистрация: 27.02.2013
Сообщений: 1,116
20.05.2014, 23:24 2
ну во первых это было бы лучше и удобнее делать через бинарник, т.е. fwrite, fread,
во вторых просто в цикле сравнивайте слова, какая тут может быть проблема вообще? if(str1 == str2) ... или if(strcmp(str1,str2)) ... как вариант
0
153 / 148 / 66
Регистрация: 20.02.2014
Сообщений: 555
21.05.2014, 00:04 3
Цитата Сообщение от nyahaas Посмотреть сообщение
seek тоже как-то странно работает
fseek работает не странно только в бинарном режиме. А у вас в текстовом открыт.
strcmp и используйте. Сравнивает слова в алфавитном порядке и возвращает значение -1, 0, 1. Например, для строк abb и abc функция strcmp("abb", "abc) вернет -1, так как abb предшествует abc, если строки поменять местами, то вернет 1. Если строки равны вернет 0.
0
0 / 0 / 0
Регистрация: 01.12.2013
Сообщений: 5
21.05.2014, 07:44  [ТС] 4
http://neerc.ifmo.ru/wiki/index.php?...B8%D1%81%D0%BA

Там есть формула с a[l] и a[r]. Как мне высчитать эти a[l] и a[r] в случае со словами?
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
21.05.2014, 07:44

Заказываю контрольные, курсовые, дипломные и любые другие студенческие работы здесь.

Написать программу, подсчитывающую, сколько раз в предложении встречается указанное слово
3) Написать программу, подсчитывающую, сколько раз в предложении встречается указанное слово. Не...

Программа, которая ищет по файлам и заменяет там текст
Может кто написать вот такую программу, или хотябы натолкнуть на мысль как ее написать ? : Есть...

Массив: Написать программу, которая ищет максимальный элемент и выводит его на экран
Дана матрица W размера n*n, где n&lt;=15. Элементы матрицы вычисляются по формуле w(i,j)=i*j*(-i...

Написать программу, которая с помощью цикла FOR /D ищет в log-файлах Windows сообщения...
Написать программу, которая с помощью цикла FOR /D ищет в log-файлах Windows сообщения, задаваемые...


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

Или воспользуйтесь поиском по форуму:
4
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2020, vBulletin Solutions, Inc.