close

Вход

Забыли?

вход по аккаунту

?

Задача 2 (6)

код для вставкиСкачать
Задача №2.
Условие задачи
В заданной строке подсчитать, сколько раз встречается символ "*" и сколько раз символ"+". Указать смещение каждого вхождения относительно предыдущего вхождения.
Описание метода решения задачи
1. Выявляем исходные данные, результаты, назначаем им имена.
Исходные данные: строка *str- объявляется как указатель; переменная-указатель-*tmp1, в ней сохраняем адрес начала строки
len1 - длина строки
len2 - позиция найденного символа sim_1 - счетчик количества символов
f - переменная - флаг, используется в составном условии для фиксации позиции найденного символа (вначале первой далее последующих позиций)
Результаты: позиция найденного символа, смещение относительно предыдущего вхождения символа;
сколько раз встречается каждый из указанных символов
2. Выбираем метод решения задачи, разбиваем на этапы (с учетом возможностей ЭВМ)
Первоначально составим укрупненную схему, а затем подробную для блока III.
Укрупненная схема
I. Подключение всех необходимых заголовочных файлов
II. Глобальные описания переменных char char *str,*tmp1; int sim_1=0,len1,len2=0,f=0;
III. Получение необходимого результата и вывод его на экран
III. 1. МРЗ:
* вводим строку (gets(str); функция считывает строку из stdin и записывает адрес str, добавляя символ '\0')
* в переменную len1 записываем длину строки str
* в цикле "перебора элементов строки" - while(*str != '\0'): если не конец строки
- ищем вхождение символа, для этого проверяем, если символ в строке равен искомому (if(*str=='*')) и еще не было найдено совпадений (f==0) - это составное условие в программе должно быть записано следующим образом: if(*str=='*'&& f==0), то
* в переменной сохраняем адрес первого вхождения символа, (tmp1=str;)
* флаг устанавливаем в единицу (f=1;) - совпадение найдено
* считаем количество символов, * выводим на экран номер символа (sim_1)
- иначе ищем последующие вхождения искомого символа, для этого проверяем, если символ в строке равен искомому (if(*str=='*')) и совпадения есть (f==1) - if(*str=='*'&& f==1), то
* вычисляем смещение от предыдущего символа (len2=str-tmp1; из текущего адреса отнимается начальный адрес)
* в переменной сохраняем адрес вхождения символа (tmp1=str;)
* считаем количество символов, * выводим на экран номер символа (sim_1) и смещение относительно предыдущего вхождения символа
- в теле цикла увеличиваем адрес переменной str на одну ячейку (str++), иначе из цикла не выйдем
* вывод результата: проверяем, если счетчик равен нулю, то выводим "символ не найден", иначе выводим на экран "символа '*' встречается -", sim_1 "раз"
* для поиска следующего символа '+' необходимо:
- сбросить в ноль счетчик, позицию найденного символа и переменную - флаг
- строку принять равной str=str-len1, т.е. в указатель str записать адрес первого символа введенной строки
- выполнить цикл "перебора элементов строки" - while(*str != '\0') (смотри выше)
Блок - схема задачи № 2
Программа, реализующая данный алгоритм
#include <stdio.h>
#include <string.h>
#include <conio.h>
void main()
{
char *str,*tmp1;
int sim_1=0,len1,len2=0,f=0;
clrscr();
printf("Введи строку с символами * i +.\n");
gets(str);
len1=strlen(str);
printf("\nСимвол *: \n");
while(*str != '\0')
{
if(*str=='*'&& f==0)
{
f=1;
tmp1=str;
sim_1++;
printf("\'*\' - %d\n",sim_1);
}
else if(*str=='*' && f==1)
{
len2=str-tmp1;
tmp1=str;
sim_1++;
printf("\'*\' - %d, смещение от предыдущего вхождения символа - %d\n",sim_1,len2-1);
}
str++;
}
if (sim_1==0) printf("нет ");
else printf("символ * встречается - %d",sim_1);printf(" раз\n");
sim_1=0;
str=str-len1;
len2=0;
f=0;
printf("\nСимвол +:\n");
while(*str != '\0')
{
if(*str=='+' && f==0 )
{
tmp1=str;
sim_1++;
f=1;
printf("\'+\' - %d\n",sim_1);
}
else if(*str=='+' && f==1 )
{
sim_1++;
len2=str-tmp1;
tmp1=str;
printf("\'+\' - смещение от предыдущего вхождения символа - %d\n",sim_1,len2-1);
}
str++;
}
if (sim_1==0) printf("нет");
else printf("символ + встречается - %d",sim_1);printf(" раз\n");
getch();
}
Документ
Категория
Рефераты
Просмотров
38
Размер файла
22 Кб
Теги
задачи
1/--страниц
Пожаловаться на содержимое документа