Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / C++ [игнор отключен] [закрыт для гостей] / Комментарии... / 21 сообщений из 21, страница 1 из 1
14.04.2007, 23:30
    #34461470
Homoerro number 2
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Комментарии...
Срочно нужен подробный коммент к каждой строчке данной программы(тема:Строки), очень срочно!
помогите, пожалуйста, заранее огромный респект и чловеческое спасибо!


Сами задания:
1)Дана последовательность слов. Напечатать те слова последовательности, которые отличны от последнего слова и удовлетворяют следующему свойству: слово симметрично.
2)В заданной строке удалить все символы двоеточие (:) и подсчитать количество удаленных символов.
3)Программа. Дана непустая последовательность непустых слов из латинских букв; соседние слова отделены друг от друга запятой, за последним словом—точка. Определить количество слов, которые оканчиваются буквой w;

Сама программа:

#include<iostream.h>
#include<string.h>
#include<stdlib.h>
#include<stdio.h>
char *str;
int choice;

void first(char *str)
{
int i,az,j,alpha,palin,k,in;
char *sl,*lw;
sl=(char*)calloc(10,1);
lw=(char*)calloc(10,1);
az=0;
for (i=strlen(str);i>=0;i--)
if (str ==' ') {for (j=i+1;j<=strlen(str);j++)
lw[j-i-1]=str[j];break;}
lw[j-i]='\0';

for (j=az;j<=i;j++) sl[j-az]=str[j];
for (i=0;i<=strlen(str);i++)
if (str==' ' || i==strlen(str)-1)
{
sl[0]='\0';
for (j=az;j<=i;j++) sl[j-az]=str[j];
sl[j-az-1]='\0';
palin=0;
in=0;
for (k=strlen(sl)-1;k>=0;k--)
{if (sl[in]!=sl[k]) palin=1;in++;}
if (palin==0 && strcmp(sl,lw)!=0) cout<<sl<<endl;
az=i+1;
}
free(sl);
}

void second(char *str)
{
int i,j,sch;
sch=0;
for (i=0;i<=strlen(str);i++)
if (str==':') {for (j=i;j<strlen(str);j++) str[j]=str[j+1];i--;sch++;}
cout<<str<<endl;
cout<<sch<<endl;
}

void third(char *str)
{
int i,sch;
sch=0;
for (i=0;i<strlen(str)-1;i++)
{
if ((str=='w' && str[i+1]==',') || (str=='w' && str[i+1]=='.')) sch++;
}
cout<<sch<<endl;
}
int main()
{
while (choice!=4)
{
cout<<"1 - Решить 1 задачу"<<endl;
cout<<"2 - Решить 2 задачу"<<endl;
cout<<"3 - Решить 3 задачу"<<endl;
cout<<"4 - ‚Выход"<<endl;
cin>>choice;
str=(char*)calloc(255,sizeof(char));
if (choice!=4){
cout<<"‚ўҐ¤ЁвҐ бва®Єг\n";
gets(str); }
if (choice==1) first(str);
if (choice==2) second(str);
if (choice==3) third(str);
free(str);}
return 0;}




p.s. Help good peoples!!!!!!!!!
...
Рейтинг: 0 / 0
16.04.2007, 20:01
    #34464644
Homoerro number 2
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Комментарии...
ХЭЛП МИ!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
...
Рейтинг: 0 / 0
16.04.2007, 20:01
    #34464645
Homoerro number 2
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Комментарии...
Очень надо.
...
Рейтинг: 0 / 0
16.04.2007, 20:02
    #34464646
Homoerro number 2
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Комментарии...
Прошу помощи у вас!
...
Рейтинг: 0 / 0
16.04.2007, 20:42
    #34464699
blinded
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Комментарии...
вам сюда
...
Рейтинг: 0 / 0
17.04.2007, 12:11
    #34465959
FasterHarder
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Комментарии...
Код: plaintext
I started in 1983, in 2007 i still on a case!

Хотел разобраться с твоим кодом ибо енто интересно, но некоторые строки сам не понимаю. Начал делать, до ума не довел, может тебе частично поможет мои комменты. А вообще советую сделать так, встаешь на первую строку и если встречаешь непонятную или незнакомую функцию лезешь в гуглю и допустим набираешь "описание функции malloc в С" получаешь 500 документов и начинаешь разьираться, не спорю долго, но если сам разберешься вырастешь как программист однозачно. Я сам практически незнаю ни С, ни С++ и приходится разбираться с кодом именно так.
Делай переменные более мнемоческие, а не n, num, sum и т д. Если сделал некоторые комменты неправильно, думаю меня поправят.
Код: plaintext
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.
//========================================================
// принято соглашение, комментарии стоит выше комментируемой строк( и )
// для обработки потоков ввода - вывода
#include<iostream.h>
// подключаешь класс типа string, для работы со строками
#include<string.h>
// класс для динамического распределения памяти
#include<stdlib.h>
// для работы с потоками
#include<stdio.h>
char *str;
int choice;
//=========================================================================
void first(char *str)
{
int i,az,j,alpha,palin,k,in;
char *sl,*lw;
// выделяешь 10 объектов по 1 байту ( лучше new )
sl=(char*)calloc( 10 , 1 );
lw=(char*)calloc( 10 , 1 );
az= 0 ;
// цикл, проходящий по всей строке, находящейся в параметре str от конца строки до 
// начала
for (i=strlen(str);i>= 0 ;i--)
if (str==' ')
{
	for (j=i+ 1 ;j<=strlen(str);j++)
		lw[j-i- 1 ]=str[j];
	break;
}
// добавляем нуль символ, который завершает каждую строку в С++, насчет С незнаю 
lw[j-i]='\0';

for (j=az;j<=i;j++) sl[j-az]=str[j];
for (i= 0 ;i<=strlen(str);i++)
if (str==' ' || i==strlen(str)- 1 )
{
sl[ 0 ]='\0';
for (j=az;j<=i;j++) sl[j-az]=str[j];
sl[j-az- 1 ]='\0';
palin= 0 ;
in= 0 ;
for (k=strlen(sl)- 1 ;k>= 0 ;k--)
{if (sl[in]!=sl[k]) palin= 1 ;in++;}
if (palin== 0  && strcmp(sl,lw)!= 0 ) cout<<sl<<endl;
az=i+ 1 ;
}
free(sl);
}
//=========================================================================
void second(char *str)
{
int i,j,sch;
sch= 0 ;
for (i= 0 ;i<=strlen(str);i++)
if (str==':') {for (j=i;j<strlen(str);j++) str[j]=str[j+ 1 ];i--;sch++;}
cout<<str<<endl;
cout<<sch<<endl;
}
//=========================================================================
void third(char *str)
{
int i,sch;
sch= 0 ;
for (i= 0 ;i<strlen(str)- 1 ;i++)
{
if ((str=='w' && str[i+ 1 ]==',') || (str=='w' && str[i+ 1 ]=='.')) sch++;
}
cout<<sch<<endl;
}
//=========================================================================
int main()
{
// начинаем цикл, продолжающийся до тех пор, пока не будет введена 4 - ка
while (choice!= 4 )
{
cout<<"1 - Решить 1 задачу"<<endl;
cout<<"2 - Решить 2 задачу"<<endl;
cout<<"3 - Решить 3 задачу"<<endl;
cout<<"4 - ‚Выход"<<endl;
// считываем введеное значение в переменную ( необходмио для выхода из цикла ) 
cin>>choice;
// выделяем для размещения 255 объектов указанного размера ( типа char )
// лучше использовать new и delete, а не calloc и free
str=(char*)calloc( 255 ,sizeof(char));
if (choice!= 4 ){
cout<<"‚ўҐ¤ЁвҐ бва®Єг\n";
// Функция предназначена для ввода строки символов из файла stdin. 
// Возвращает str если чтение прошло успешно и NULL в обратном случае
// одна из наиболее опасных функций с своем классе, т к можно затереть нужную память
// нет проверки на диапазон
gets(str); }
// начинаем управляющую конструкцию и вызываем соот = щую функцию в зависимости 
// от choice ( имхо, я бы сделал switch )
if (choice== 1 ) first(str);
if (choice== 2 ) second(str);
if (choice== 3 ) third(str);
// освобождаем память ( лучше delete )
free(str);}
// Все прошло удачно!
return  0 ;}
//=========================================================================
...
Рейтинг: 0 / 0
18.04.2007, 07:41
    #34468206
Homoerro number 2
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Комментарии...
FasterHarder, ема спасибо тебе огромное, от души помог мне разобраться со строками.
Респект и уважуха!!!
...
Рейтинг: 0 / 0
18.04.2007, 17:44
    #34470718
Homoerro number 2
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Комментарии...
Люди, помогите плиз с другими комментами...
...
Рейтинг: 0 / 0
18.04.2007, 17:48
    #34470745
Homoerro number 2
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Комментарии...
Люди, а с другими комментами, кто поможет разобраться?
...
Рейтинг: 0 / 0
18.04.2007, 18:06
    #34470818
ErV
ErV
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Комментарии...
Homoerro number 2Люди, а с другими комментами, кто поможет разобраться?
Я конечно, дико извиняюсь, но за это время можно было бы прочесть ссылку, которую дал blinded и разобраться самому.
...
Рейтинг: 0 / 0
18.04.2007, 21:13
    #34471179
Анатолий Широков
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Комментарии...
Почему вы считаете, что посетители форума будут тратить свое время на это? Обратитесь в форум о работе, сделайте предложение и договоритесь о цене.
...
Рейтинг: 0 / 0
19.04.2007, 00:33
    #34471360
MasterZiv
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Комментарии...
FasterHarder пишет:
> // для обработки потоков ввода - вывода
> #include<iostream.h>
Для потоков ввода-вывода было бы
#include <iostream>
Ну ладно, будем считать что старый компилятор.

> // подключаешь класс типа string, для работы со строками
> #include<string.h>
Э, ты где такой класс видал ?

> // класс для динамического распределения памяти
> #include<stdlib.h>

Ага, сказки не рассказывай. Это - просто один из заголовков CRTL.

> // для работы с потоками
> #include <stdio.h>

Уже же был для работы с потоками, ты уж определился бы сначала ....

> char *str;
> int choice;
> //=========================================================================
> void first(char *str)
> {
> int i,az,j,alpha,palin,k,in;
> char *sl,*lw;
> // выделяешь 10 объектов по 1 байту ( лучше new )
> sl=(char*)calloc(*10*,*1*);

"объекты" по одному байту и называются "байты", не так ли ?

> lw=(char*)calloc(*10*,*1*);
> az=*0*;
> // цикл, проходящий по всей строке, находящейся в параметре str от конца строки до
> // начала
> for (i=strlen(str);i>=*0*;i--)
> if (str==' ')
> {
> for (j=i+*1*;j<=strlen(str);j++)
> lw[j-i-*1*]=str[j];
> break;
> }

> // добавляем нуль символ, который завершает каждую строку в С++, насчет С незнаю
> lw[j-i]='\0';



>
> for (j=az;j<=i;j++) sl[j-az]=str[j];
> for (i=*0*;i<=strlen(str);i++)
> if (str==' ' || i==strlen(str)-*1*)
> {
> sl[*0*]='\0';
> for (j=az;j<=i;j++) sl[j-az]=str[j];
> sl[j-az-*1*]='\0';
> palin=*0*;
> in=*0*;
> for (k=strlen(sl)-*1*;k>=*0*;k--)
> {if (sl[in]!=sl[k]) palin=*1*;in++;}
> if (palin==*0* && strcmp(sl,lw)!=*0*) cout<<sl<<endl;
> az=i+*1*;
> }
> free(sl);


Э, а где же free(lw) ?

> //=========================================================================
> int main()
> {
> // начинаем цикл, продолжающийся до тех пор, пока не будет введена 4 - ка
Да, вероятность того, что с подачи там будет четверка действительно
ничножно мала, поэтому зачем тратить лишние усилия на инициализацию
переменной.
> while (choice!=*4*)
А циклы с постусловием придумал проклятый Вирт, поэтому мы их применять
не будем, абсолютна сагласин с афтарам !!
> {
> cout<<"1 - Решить 1 задачу"<<endl;
> cout<<"2 - Решить 2 задачу"<<endl;
> cout<<"3 - Решить 3 задачу"<<endl;
> cout<<"4 - ‚Выход"<<endl;
> // считываем введеное значение в переменную ( необходмио для выхода из цикла )
> cin>>choice;

> // выделяем для размещения 255 объектов указанного размера ( типа char )
> // лучше использовать new и delete, а не calloc и free
Откуда такая уверенность, что new и delete лучше чем calloc и free ?
Мне бы такую ...
> str=(char*)calloc(*255*,sizeof(char));

> if (choice!=*4*){
> cout<<"‚ўҐ¤ЁвҐ бва®Єг\n";

А почему ничего не сказано о этих симпатичных сикаряшках ?
Например: "они создают эффект волны на экране, вызывая у пользователя
приятные ассоциации с морем и настраивая пользователя на доброжелательный
лад".

> // Функция предназначена для ввода строки символов из файла stdin.
> // Возвращает str если чтение прошло успешно и NULL в обратном случае
> // одна из наиболее опасных функций с своем классе, т к можно затереть нужную память
> // нет проверки на диапазон
Знали б вы сколько таких опасных функций в CRTL ...
> gets(str); }

> // начинаем управляющую конструкцию и вызываем соот = щую функцию в зависимости
> // от choice ( имхо, я бы сделал switch )
Но ты до конца таки не уверен, сделал бы ты свитч или нет, так ?

> if (choice==*1*) first(str);
> if (choice==*2*) second(str);
> if (choice==*3*) third(str);

> // освобождаем память ( лучше delete )
> free(str);}
> // Все прошло удачно!

Не думаю.
> return *0*;}

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

Кстати, о задачах. Задача номер одын не требует выделения дополнительной памяти.
Posted via ActualForum NNTP Server 1.4
...
Рейтинг: 0 / 0
19.04.2007, 01:06
    #34471383
dr-Wicked
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Комментарии...
А кто скажет, на каком языке это написано.
Regards
dr-Wicked
...
Рейтинг: 0 / 0
19.04.2007, 01:14
    #34471390
FasterHarder
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Комментарии...
Код: plaintext
I started in 1983, in 2007 i still on a case!
имхо, если судить по заголовочным файлам то на чистых сях.
...
Рейтинг: 0 / 0
19.04.2007, 02:46
    #34471417
White Owl
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Комментарии...
FasterHarderимхо, если судить по заголовочным файлам то на чистых сях.Это написано на студенческом-недоученом языке.
...
Рейтинг: 0 / 0
19.04.2007, 08:55
    #34471560
Serik Akhmetov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Комментарии...
Зачем нужны комментарии типа
Код: plaintext
1.
// выделяешь 10 объектов по 1 байту ( лучше new )
sl=(char*)calloc( 10 , 1 );
это и так понятно

В комментарий нужно писать не что ты делаешь, а для чего ты это делаешь.
Также комментарий нужен в начале программы - автор, версия, назначение программы.
Нужно описывать назначение функций, а лучше и переменных.
Нужно описывать логику работы и не очевидные моменты.

Судя по
Код: plaintext
1.
cout<<str<<endl;
cout<<sch<<endl;
Это С++.
...
Рейтинг: 0 / 0
19.04.2007, 09:37
    #34471658
Akh
Akh
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Комментарии...
dr-WickedА кто скажет, на каком языке это написано.
Regards
dr-Wicked

Си и два плюса. Но судя по отзывам - два минуса. ;)
...
Рейтинг: 0 / 0
19.04.2007, 18:27
    #34473942
ErV
ErV
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Комментарии...
FasterHarder
Код: plaintext
I started in 1983, in 2007 i still on a case!
имхо, если судить по заголовочным файлам то на чистых сях.
Половина из C, половина из C++.
Из C++:
Код: plaintext
1.
cout<<"1 - Решить 1 задачу"<<endl;
(кстати, помнится в винде быль большие проблемы с перекодировкой русских букв. В общем, под WinXP могут быть кракозяблики).

Из C:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
void first(char *str)
{
int i,az,j,alpha,palin,k,in;
char *sl,*lw;
sl=(char*)calloc( 10 , 1 );
lw=(char*)calloc( 10 , 1 );
az= 0 ;
for (i=strlen(str);i>= 0 ;i--)
Так как все обьявления переменных свалены в начало, и нет стандартного
"for (int i = ".

Вот это вообще сплошной глюк:
Код: plaintext
1.
2.
3.
for (i=strlen(str);i>= 0 ;i--)
if (str==' ') {for (j=i+ 1 ;j<=strlen(str);j++)
lw[j-i- 1 ]=str[j];break;}
Особенно радует "if (str==' ')" - компилится не будет, и явно из паскаля пришло, плюс с кавычками путаницы.
break тоже неясно куда относится, к первому for или ко второму (если предположить что там {} пропущены). Конечно, можно по алгоритму восстановить, но мне лень...
...
Рейтинг: 0 / 0
19.04.2007, 18:56
    #34474022
MasterZiv
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Комментарии...
> if (str==' ') {for (j=i+*1*;j<=strlen(str);j++)
> lw[j-i-*1*]=str[j];break;}
>
> Особенно радует "if (str==' ')" - компилится не будет, и явно из паскаля
> пришло, плюс с кавычками путаницы.

Почему не будет ? Два числа всегда сравнить можно.
Posted via ActualForum NNTP Server 1.4
...
Рейтинг: 0 / 0
19.04.2007, 18:57
    #34474025
White Owl
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Комментарии...
AkhСи и два плюса. Но судя по отзывам - два минуса. ;)Ну не надо. На С-- это уж тем более не похоже.

ErVОсобенно радует "if (str==' ')" - компилится не будет, и явно из паскаля пришло, плюс с кавычками путаницы.Ну почему ж не будет компилиться? Это запросто откомилируется. Ты всегда можешь сравнить значение указателя с целым числом. В данном случае конечно, автор явно хотел не этого, но это уже другой вопрос :)

ErVbreak тоже неясно куда относится, к первому for или ко второму (если предположить что там {} пропущены). Конечно, можно по алгоритму восстановить, но мне лень...Ну зачем же алгоритм мучать, он там и так уже замучаный. А брек к внешнему циклу относится. По синтаксису видно.
...
Рейтинг: 0 / 0
19.04.2007, 19:56
    #34474151
ErV
ErV
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Комментарии...
White OwlНу почему ж не будет компилиться? Это запросто откомилируется. Ты всегда можешь сравнить значение указателя с целым числом. В данном случае конечно, автор явно хотел не этого, но это уже другой вопрос :)
А, пардон, упустил дейстивтельно. Спасибо.

White Owl
Ну зачем же алгоритм мучать, он там и так уже замучаный. А брек к внешнему циклу относится. По синтаксису видно.
По синтаксису видно, но там форматирование такое. что у меня сомнения по поводу того, что брейк дествительно хотели для внешнего цикла сделать.
...
Рейтинг: 0 / 0
Форумы / C++ [игнор отключен] [закрыт для гостей] / Комментарии... / 21 сообщений из 21, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]