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

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
Kashtan$$$
1 / 1 / 0
Регистрация: 26.11.2009
Сообщений: 49
#1

Не могу до конца разобрать код программы - C++

30.07.2010, 16:47. Просмотров 665. Ответов 10
Метки нет (Все метки)

Задание выглядит следующим образом дан код программы его надо прочитать и разобрать, т.е. объяснить выполнение программы. И вот непосредственно сам код
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
#include<stdio.h>
#include<stdlib.h>
#include<conio.h>
#include<math.h>
#include<string.h>
#include<ctype.h>
void faili()
{FILE *xp;char S[256],s,sim[]={'i','u','o','e','a','I','O','A','U','E'};
int i=0,nb=0,kb=0,c,n,k=0;
xp=fopen("1.dat","r");
if(xp==NULL){perror("Oshibka!!!\n");}
puts("\n Sodergimoe Faila");
 
 
 
while((c=getc(xp))!=EOF)
{
S[i]=c;printf("%c",S[i]);
i++;}
n=i;
s=10;
printf("\n\n slova nachinaushiesya s glasnih \n");
for(i=0;i<=n;i++)
if(S[i]!=' ' && kb!=n && S[i]!=s)kb++;
else
{c=0;
for(int j=0;j<10;j++)
if(S[nb]==sim[j])c++;
if(c==1)
{printf("\n");
for(nb;nb<kb;nb++)
{printf("%c",S[nb]);
if(nb==kb-1) k++;}
nb=kb+=1;
}
else nb=kb+=1;
}
printf("\n kol-vo slov %d",k);
 
 
 
 
 
 
fclose(xp);
 
/*xp=fopen("vz.dat","a");
if(xp==NULL){perror("Oshibka!!!\n");}
 
while((s=getchar())!='e')fprintf(xp,"kolvo slov nachinaushihsya s glasnih ravno %d .",k++);
fclose(xp);*/
getch();
 
}
main()
{
clrscr();faili();
 
 
 
getch();}
Мне непонятно зачем s=10 ? Что это значит? И почему в условии S[i]!=s?Для чего это?ну и непонятен смысл вот этой строки nb=kb+=1; что оно делает?
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
iama
1249 / 974 / 48
Регистрация: 30.07.2010
Сообщений: 5,297
30.07.2010, 17:09     Не могу до конца разобрать код программы #2
s = 10 присваевает переменной индекс 10 элемента множества, которого нет. так, проверка S[i] != s как бы должна проверять наличие символа в множестве
Nameless One
Эксперт С++
5765 / 3414 / 255
Регистрация: 08.02.2010
Сообщений: 7,433
30.07.2010, 17:16     Не могу до конца разобрать код программы #3
Цитата Сообщение от iama Посмотреть сообщение
s = 10 присваевает переменной индекс 10 элемента множества, которого нет. так, проверка S[i] != s как бы должна проверять наличие символа в множестве
Не индекс, а символ под порядковым номером 10. Зачем - неизвестно.
Неудивительно, что разобрать ничего не получается. Автор, наверно, ни разу не слышал про форматирование кода. А что программа должна делать?
Kashtan$$$
1 / 1 / 0
Регистрация: 26.11.2009
Сообщений: 49
30.07.2010, 17:19  [ТС]     Не могу до конца разобрать код программы #4
Что-то не очень я тебя понял факт еще в том что если s присваивать другие значения то программа правильно не выполняется....вот я и спрашиваю почему символьной переменной дано именно это значение???

Добавлено через 1 минуту
Как я понял программа считывает текст из файла и выводит его на экран а потом выводит слова начинающиеся с гласных но вот ну не могу понять для чего эта s и почему именно 10?
Nameless One
Эксперт С++
5765 / 3414 / 255
Регистрация: 08.02.2010
Сообщений: 7,433
30.07.2010, 17:22     Не могу до конца разобрать код программы #5
Попробуй убрать s из программы.
Kashtan$$$
1 / 1 / 0
Регистрация: 26.11.2009
Сообщений: 49
30.07.2010, 17:23  [ТС]     Не могу до конца разобрать код программы #6
Цитата Сообщение от Nameless One Посмотреть сообщение
Попробуй убрать s из программы.
пробовал программа тогда не правильно работает(((
iama
1249 / 974 / 48
Регистрация: 30.07.2010
Сообщений: 5,297
30.07.2010, 17:29     Не могу до конца разобрать код программы #7
число 10 - несуществующий элемент множества. по логике, раз тут работает, с 11 тоже должно сработать
Kashtan$$$
1 / 1 / 0
Регистрация: 26.11.2009
Сообщений: 49
30.07.2010, 17:31  [ТС]     Не могу до конца разобрать код программы #8
Цитата Сообщение от iama Посмотреть сообщение
число 10 - несуществующий элемент множества. по логике, раз тут работает, с 11 тоже должно сработать
в том то и соль что работает только когда 10 пробовал все остальные числа работает неправильно..
iama
1249 / 974 / 48
Регистрация: 30.07.2010
Сообщений: 5,297
30.07.2010, 21:34     Не могу до конца разобрать код программы #9
Вспомним Макколнела - "Пишите код так, как будто сопровождать его будет склонный к насилию психопат, который знает, где вы живете".
Вы знаете того, кто это сделал?
Kashtan$$$
1 / 1 / 0
Регистрация: 26.11.2009
Сообщений: 49
31.07.2010, 14:58  [ТС]     Не могу до конца разобрать код программы #10
к сожалению нет(((( если бы знал я бы у него все спросил...
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
01.08.2010, 03:46     Не могу до конца разобрать код программы
Еще ссылки по теме:

Как приведенный код выводит ближайшую степень двойки? Разобрать работу программы C++
C++ Не могу составить код программы
C++ Разобрать рекурсивный код
Разобрать код C++
C++ Разобрать код

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

Или воспользуйтесь поиском по форуму:
easybudda
Эксперт С++
9412 / 5435 / 917
Регистрация: 25.07.2009
Сообщений: 10,428
01.08.2010, 03:46     Не могу до конца разобрать код программы #11
Цитата Сообщение от Kashtan$$$ Посмотреть сообщение
программа считывает текст из файла и выводит его на экран а потом выводит слова начинающиеся с гласных
+ считает все слова и отдельно те, что с гласной начинаются (кстати, буква Y в английском алфавите тоже гласной считается)
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
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <ctype.h>
 
#ifndef MAX_PATH
#define MAX_PATH 1024
#endif
    
#define DELIM " ,.;:!?\t\n"
 
int main(void){
    char path[MAX_PATH], * p, * buf;
    long len, cntVowels, cntAll;
    FILE * f;
    const char * VOWELS = "AEIOUY";
    
    printf("File name: ");
    if ( ! fgets(path, MAX_PATH, stdin) ){
        perror("fgets");
        exit(EXIT_FAILURE);
    }
    if ( p = strrchr(path, '\n') )
        *p = '\0';
    
    if ( ( f = fopen(path, "rb") ) == NULL ){
        perror("fopen");
        exit(EXIT_FAILURE);
    }
    
    fseek(f, 0, SEEK_END);
    if ( ( len = ftell(f) ) < 1 ){
        fprintf(stderr, "Wrong or empty file!\n");
        exit(EXIT_FAILURE);
    }
    rewind(f);
    if ( ( buf = (char*)malloc(len + 1) ) == NULL ){
        perror("malloc");
        exit(EXIT_FAILURE);
    }
    if ( fread(buf, 1, len, f) != len ){
        fprintf(stderr, "Error reading file!\n");
        exit(EXIT_FAILURE);
    }
    buf[len] = '\0';
    
    if ( fclose(f) ){
        perror("fclose");
        exit(EXIT_FAILURE);
    }
    
    printf("\nFile contents:\n\n%s\n", buf);
    cntVowels = cntAll = 0;
    printf("Start by vowels:\n");
    for ( p = strtok(buf, DELIM); p; p = strtok(NULL, DELIM) ){
        ++cntAll;
        if ( strchr(VOWELS, toupper(*p)) ){
            ++cntVowels;
            printf("%s\n", p);
        }
    }
    
    printf("\nAll words: %d\nStarts by vowels: %d\n", cntAll, cntVowels);
    
    free(buf);
    exit(EXIT_SUCCESS);
}
Yandex
Объявления
01.08.2010, 03:46     Не могу до конца разобрать код программы
Ответ Создать тему
Опции темы

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