Меню
Разработки
Разработки  /  Информатика  /  Разное  /  Решение задач С4

Решение задач С4

Методическая разработка. Решение задач С4 (Обработка данных, вводимых в виде символьных строк, язык программирования Си)
13.04.2012

Описание разработки

Содержание

  1. Символьные строки в языке программирования Си
  2. Условие задачи С4
  3. Текст программы на языке Си
  4. Пояснения к программе
  5. Другие задачи
  6. Условие задачи С4

В турагентствах Москвы продают путёвки на летний отдых в Грецию,  Испанию, Италию. В реестре турфирм каждая страна имеет свой код (Греция – 30, Испания – 31, Италия – 32). Был проведен мониторинг стоимости путёвок в различных турфирмах с одинаковыми параметрами проживания и питания.

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

 На вход программе в первой строке подается количество строк данных о стоимости туров. В каждой из последующих N строк находится информация в следующем формате:

<Название фирмы> <Улица, где расположена турфирма> <Код страны>  <Стоимость тура>

<Название фирмы> – строка, состоящая не более, чем из 20 символов без пробелов.

<Улица, где расположена турфирма > – строка, состоящая не более, чем из 20 символов без пробелов.

 <Код страны> – одно из чисел – 30, 31 или 32.

 <Стоимость тура> – целое число в диапазоне от 1000 до 3000, обозначающее стоимость одного тура в условных единицах.

Все эти данные разделены ровно одним пробелом.

 Пример входных строк:

Аэротрэвел Неглинная 30 1010

Тихаязаводь Энтузиастов 32 2500

Программа должна выводить через пробел 3 числа – количество фирм, продающих дешевле всего туры в Грецию, Испанию и Италию соответственно. Если тур в  какую-то страну нигде не продавался, то следует вывести 0.

Пример выходных данных:

11 8 0

Содержимое разработки

Дершевич О. М., ГОУ СОШ 141


Методическая разработка

Решение задач С4

(Обработка данных, вводимых в виде символьных строк,

язык программирования Си)


Содержание

  1. Символьные строки в языке программирования Си

  2. Условие задачи С4

  3. Текст программы на языке Си

  4. Пояснения к программе

  5. Другие задачи


Символьные строки в языке программирования Си


В языке Си нет отдельного типа для строк. Работа со строками реализована через массивы. Хотя в других языках программирования имеется такой тип данных как string - строки.

В Си символьная строка - это одномерный массив типа char, заканчивающийся нулем - нулевым байтом.

Символьная константа '\0' определена для нулевого байта. Поэтому, если в массиве должно содержаться N символов, то нужно определять массив как массив для N+1 элемента. Например, когда мы говорим, что массив содержит 100 элементов: a[1], a[2], ..., a[99], то это значит, что элемент a[100] содержит ноль.

Обычный одномерный массив можно трактовать как строку символов. Язык Си допускает строковые константы, хотя в языке и нет специального типа для таких констант. Делается это через массив. Строковая константа - это набор литер. В конце строковой константы не нужно ставить символ '\0'. Это сделает сам компилятор при обработке массива.

Существуют очень простые способы ввода строки с клавиатуры. Первый способ - воспользоваться функцией scanf() со спецификацией ввода %s. При этом очень хорошо надо помнить, что функция вводит символы до первого пробела.

Второй способ - это воспользоваться специальной библиотечной функцией gets(). Она находится в файле stdio.h. Данная функция позволяет вводить строки, содержащие пробелы. При этом можно исправлять введенные символы пока не нажата клавиша ENTER. Ввод информации заканчивается нажатием клавиши ENTER. Обе указанные функции автоматически ставят в конце строки (массива) нулевой байт. Но важно не забыть зарезервировать для строки место в памяти компьютера. Здесь используется, как было раньше показано, имя массива.


Вывод строк организуется через функции printf() или puts(). Обе эти функции выводят информацию строки до нулевого байта. Функция puts() предусматривает вывод в конце выводимой строки символа новой строки. Функция printf() не выводит этого символа в конце строки. Поэтому нужно это предусматривать в программе. То есть это значит, что надо предусматривать самим символы "\n" в конце формата для вывода строки.



Условие задачи С4


В турагентствах Москвы продают путёвки на летний отдых в Грецию, Испанию, Италию. В реестре турфирм каждая страна имеет свой код (Греция – 30, Испания – 31, Италия – 32). Был проведен мониторинг стоимости путёвок в различных турфирмах с одинаковыми параметрами проживания и питания.


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


На вход программе в первой строке подается количество строк данных о стоимости туров. В каждой из последующих N строк находится информация в следующем формате:





– строка, состоящая не более, чем из 20 символов без пробелов.


– строка, состоящая не более, чем из 20 символов без пробелов.


– одно из чисел – 30, 31 или 32.


– целое число в диапазоне от 1000 до 3000, обозначающее стоимость одного тура в условных единицах.


Все эти данные разделены ровно одним пробелом.


Пример входных строк:


Аэротрэвел Неглинная 30 1010

Тихаязаводь Энтузиастов 32 2500


Программа должна выводить через пробел 3 числа – количество фирм, продающих дешевле всего туры в Грецию, Испанию и Италию соответственно. Если тур в какую-то страну нигде не продавался, то следует вывести 0.


Пример выходных данных:


11 8 0




Текст программы на языке Си



#include stdio.h
#include conio.h
#include string.h

int main(void)
{
int min[3], ans[3];
int i, N, country, price;
char firma [21], street [21];
printf ("Insert N (Number of elements)\n");
scanf (“%d”, &N);
for (i=0; i{
main[i]=3001;

ans[i]=0;
}
for (i=0; i{
scanf (“%s %s %d %d”, firma, street, &country, &price);
country=country – 30;
if (min[country] price)
{
min[country] = price;
ans[counry] =1;
}
else
if (min[country] == price)
ans[counry] = ans[counry] +1;
}
printf ("30: %d 31: %d 32: %d \n", ans[0], ans[1], ans[2]);
return(0);

}



Пояснения к программе


#include stdio.h
#include conio.h
#include string.h

int main(void)
{
int min[3], ans[3]; /* min[0] – минимальная стоимость тура в Грецию,
min[1] - минимальная стоимость тура в Испанию,
min[2] –
в Италию.
ans
[0] – кол-во фирм, предлагающих туры в Грецию по мин. стоимости,
ans[1] – кол-во фирм, предлагающих туры в Испанию по мин. стоимости,
ans[2] – в Италию. */
int i, N, country, price; /* Счётчик циклов, кол-во данных, код страны, стоимость тура*/
char firma [21], street [21]; /* Строки, содержащие название фирмы и улицу, длиной не
больше 20 символов + 1 символ признак конца строки.*/
printf ("Insert N (Number of elements)\n"); /* Ввод кол-ва записей N*/
scanf (“%d”, &N);
for (i=0; ii++)
{
main[i]=3001;
ans[i]=0;
}
for (i=0; iN; i++) /* Программа читает все входные данные один раз, не запоминая их в
массиве. Во время чтения данных определяется минимальная стоим.
тура в каждую страну
min[country] и подсчитывается кол-во фирм,
продающих их по минимальной стоимости.*/
{
scanf (“%s %s %d %d”, firma, street, &country, &price);
country=country – 30;
if (min[country] price)
{
min[country] = price;
ans[counry] =1;
}
else
if (min[country] == price)
ans[counry] = ans[counry] +1;
}
printf ("30: %d 31: %d 32: %d \n", ans[0], ans[1], ans[2]); /*Вывод на печать результатов*/
return(0);

}



Другие задачи


Решение задач С4 целесообразно начинать с более простых, но аналогичных задач.


№1 (упрощённый вариант)

В турагентствах Москвы продают путёвки на летний отдых в Грецию. Был проведен мониторинг стоимости путёвок в различных турфирмах с одинаковыми параметрами проживания и питания.

Напишите эффективную по времени работы и по используемой памяти программу, которая будет определять, сколько турфирм продают эти туры дешевле всего.

На вход программе в первой строке подается количество турфирм. В каждой из последующих N строк находится информация в следующем формате:

– строка, состоящая не более, чем из 20 символов без пробелов.

– целое число в диапазоне от 1000 до 3000, обозначающее стоимость одного тура в условных единицах.

Эти данные разделены ровно одним пробелом.

Пример входной строки:

Аэротрэвел 1010

Программа должна выводить 1число – количество фирм, продающих дешевле всего туры в Грецию.

2 (упрощённый вариант)

В турагентствах Москвы продают путёвки на летний отдых в Грецию. Был проведен мониторинг стоимости путёвок в различных турфирмах с одинаковыми параметрами проживания и питания.

Напишите эффективную по времени работы и по используемой памяти программу, которая будет определять, сколько турфирм продают эти туры дешевле всего.

На вход программе в первой строке подается количество турфирм. В каждой из последующих N строк находится информация в следующем формате:

– строка, состоящая не более, чем из 20 символов без пробелов.

- номер телефона фирмы, состоящий из 11 цифр.

– целое число в диапазоне от 1000 до 3000, обозначающее стоимость одного тура в условных единицах.

Эти данные разделены ровно одним пробелом.

Пример входной строки:

Аэротрэвел 80957884433 1010

Программа должна выводить 1число – количество фирм, продающих дешевле всего туры в Грецию.


3

В турагентствах Москвы продают путёвки на летний отдых в Грецию, Испанию, Италию. В реестре турфирм каждая страна имеет свой код (Греция – 30, Испания – 31, Италия – 32). Был проведен мониторинг стоимости путёвок в различных турфирмах с одинаковыми параметрами проживания и питания.


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

Входные данные – аналогичны рассмотренной задаче С4.

Пример выходных данных:

Греция 1500

Испания 2000

Италия 2500

4

Задача, полностью аналогичная рассмотренной С4, но коды стран следующие:

Франция – 36,

Португалия – 42,

Андорра – 45.


-75%
Курсы дополнительного образования

Основы HTML

Продолжительность 72 часа
Документ: Cвидетельство о прохождении курса
4000 руб.
1000 руб.
Подробнее
Скачать разработку
Сохранить у себя:
Решение задач С4 (0.06 MB)

Комментарии 0

Чтобы добавить комментарий зарегистрируйтесь или на сайт

Вы смотрели

© 2008-2024, ООО «Мультиурок», ИНН 6732109381, ОГРН 1156733012732

Учителю!
Огромная база учебных материалов на каждый урок с возможностью удаленного управления
Тесты, видеоуроки, электронные тетради