Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

2- 0_Алгоритмические языки

.rtf
Скачиваний:
51
Добавлен:
22.06.2014
Размер:
24.27 Кб
Скачать

АЛГОРИТМИЧЕСКИЕ ЯЗЫКИ И

ТЕХНОЛОГИЯ ПРОГРАММИРОВАНИЯ - 1

Контрольная работа 2

Разобраться, что делает каждая программа и сделать описание.

Задание 1.

int strlen1(char *str)

{

int i=0; // объявление и инициализация переменной <i>

while(*str++) i++; //for(i=0; *str; str++) i++; // цикл – пока символ не нулевой, увеличиваем <i>

return i; // возврвщаем значение переменной <i>

}

Данная программа считает количество символов в строке, кроме нулевого.

Задание 2.

int SizeWord(char *express)

{

int size=0; // объявление и инициализация переменной <size>

while(*express==' ') express++; // пропускаем пробелы в начале строки

while(*express) // цикл по условию - код символа не равен нулю

{

if(*express==' ') // условие - если символ строки пробел, то

{

size++; // увеличиваем значение переменной <size>,

while(*express==' ') express++; // пропускаем следующие пробелы и

} // увеличиваем значение указателя на строку

else

express++; // иначе увеличиваем значение указателя на строку

}

return size; //error! // возвращаем значение переменной <size>

}

Данная программа считает количество слов в строке.

Ошибка заключается в том, что если в конце строки нет пробелов, функция вернет значение на единицу меньше.

Задание 3.

int strcmp1(char *str1, char *str2)

{

while(*str1) // цикл по условию - код символа не равен нулю

{

if(*str1++!=*str2++) return 0; // условие - если символ 1-й строки не равен символу 2-й строки,

} // то завершить выполнение функции и возвратить значение <0>

return 1; // возврат значения <1>

}

Сравнение 2-х строк. Если строки разные возвращается значение <0> иначе <1>.

Примечание: если начальные символы строк совпадают, но 2-я строка длиннее, то функция возвращает значение <1>

Задание 4.

int strcmp2(char *str1, char *str2)

{

while(1) // бесконечный цикл

{ //

if(*str1>*str2) return 1; // если данное условие выполняется возвращаем значение <1>

else //

if(*str1<*str2) return -1; // если данное условие выполняется возвращаем значение <-1>

else //

if(!*str1) return 0; // если символ 1-й строки равен нулю, возвращаем значение <0>

str1++; // увеличиваем указатель на первую строку

str2++; // увеличиваем указатель на вторую строку

}

}

Проверка двух строк.

Если первая строка "больше" возвращается значение <1>, если "меньше" возвращается значение

<-1>,если строки равны возвращается значение <0>.

Задание 5.

void Razdvig(char ptr[],int size)

{

int i; // объявление переменных

int len; //

len=strlen(ptr); // получение длинны строки

for(i=len; i>=0; i--) ptr[i+size]=ptr[i]; // цикл - сдвигаем строку вправо

for(i=0; i<size; i++) ptr[i]=' '; // заменяем символы пробелами

}

Данная программа сдвигает символьный массив(строку) вправо на величину <size>.

Задание 6.

void Sdvig(char ptr[])

{

int i; // объявляем переменную

int len=strlen(ptr); // получаем длину строки

for(i=0; i<len; i++) ptr[i]=ptr[i+1]; // цикл - сдвигаем строку влево

}

Процедура сдвигает строку влево на единицу.

Задание 7.

int ReplaceTab(char *str,int size)

{

int i; // объявление переменной

int len=strlen(str); // получаем длину строки и инициализируем <len>

for(i=0; i<len; i++) // цикл от начала до конца строки

{ //

if(str[i]=='\t') // условие - если символ является символом табуляции то

{ //

Sdvig(&str[i]); // вызываем процедуру <Sdvig> и передаем ей адрес символа табуляции

Razdvig(&str[i],size); // вызываем процедуру <ReplaceTab>

len+=size; // прибавляем к <len> величину сдвига

i+=size; // прибавляем к <i> величину сдвига

} //

} //

return len; // возвращаем значение <len>

}

Данная программа заменяет символы табуляции пробелами.

Задание 8.

char *ch;

int match(char *tst)

{

char *chp=ch; // объявляем и инициализируем строку <chp>

while(*tst) // цикл - пока код символа не равен нулю

{ //

if(*tst++!=*chp++) return 0; // условие - если символы не равны, возвращаем <0>

} //

ch=chp; // присваиваем строке <ch> строку <chp>

return 1; // возвращаем значение <1>

}

Данная программа удаляет из строки <ch> строку <tst>, при условии, что строка <ch> содержит в начале строку <tst>. В случае успешного выполнения процедура возвращает значение <1>, иначе значение <0>.

Задание 9.

int CharToInt(char *num)

{

int rez=0; // инициализация переменной <rez>

while(1) // бесконечный цикл

{ //

if(*num<'0' || *num>'9') return rez; // если символ не цифра, возвращаем <rez>

rez+=*num-'0'; // иначе, прибавляем к <rez> значение цифры

num++; // увеличиваем указатель

}

}

Данная программа суммирует цифры в строке до первого не цифрового символа.