Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Паскаль, Turbo Pascal, PascalABC.NET
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 28.06.2015, 20:23   #1
Гарри
Пользователь
 
Регистрация: 11.06.2015
Сообщений: 30
По умолчанию Дана непустая строка символов

Дана непустая строка символов. Построить и напечатать множество, элементами которого являются встречающиеся в последовательности знаки препинания.
Гарри вне форума Ответить с цитированием
Старый 28.06.2015, 20:58   #2
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Покажи как строку вводишь )
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 30.06.2015, 20:33   #3
Krasiosoft
Форумчанин
 
Аватар для Krasiosoft
 
Регистрация: 01.06.2015
Сообщений: 497
По умолчанию

Выводит кол-во встречающихся символов, которые заданы в PunctuationMarks. Должно помочь.
Код:
var PunctuationMarks:string ='.,-?!';
    PunctuationMarksCount:array of integer;
    InputStr:string;
    i,j:integer;

begin

  Writeln('Input string:');
  Readln(InputStr);

  SetLength(PunctuationMarksCount, Length(PunctuationMarks));
  for i:=1 to Length(PunctuationMarksCount) do
    PunctuationMarksCount[i]:=0;

  for i:=1 to Length(InputStr) do
  begin
    for j:=1 to Length(PunctuationMarks) do
    begin
      If InputStr[i]=PunctuationMarks[j] then
      begin
        PunctuationMarksCount[j]:= PunctuationMarksCount[j] + 1;
        break;
      end;
    end;
  end;

  for i:=1 to Length(PunctuationMarks) do
  begin
    Writeln(PunctuationMarks[i],' ',PunctuationMarksCount[i]);
  end;

  Readln;
end.
Если помог, буду очень благодарен за Ваш отзыв (весы в левой нижней части сообщения).
Krasiosoft вне форума Ответить с цитированием
Старый 30.06.2015, 20:57   #4
Алексей_2012
t45t
Участник клуба
 
Аватар для Алексей_2012
 
Регистрация: 20.03.2012
Сообщений: 1,849
По умолчанию

Извиняюсь, но где:
1) строится множество
2) где освобождение памяти, которую занял динамический массив?
3) почему индекс динамического массива с 1, а не с 0?
from dark to light)
Алексей_2012 вне форума Ответить с цитированием
Старый 30.06.2015, 21:40   #5
Krasiosoft
Форумчанин
 
Аватар для Krasiosoft
 
Регистрация: 01.06.2015
Сообщений: 497
По умолчанию

Цитата:
Сообщение от Алексей_2012 Посмотреть сообщение
Извиняюсь, но где:
1) строится множество
2) где освобождение памяти, которую занял динамический массив?
3) почему индекс динамического массива с 1, а не с 0?
Спасибо за замечания. Сам пока только изучаю Паскаль.

Пункт 3 исправил, насчет пункта 2 так и не могу понять, нужно чистить память или все же нет. Нашел это сообщение: http://www.programmersforum.ru/showp...32&postcount=7. И насчет строк, за ними память удалять нужно?

Задачу построить множество перед собой не ставил, думаю, автор темы на основе этого сможет это сделать сам.

Код:
var PunctuationMarks:string ='.,-?!';
    PunctuationMarksCount:array of integer;
    InputStr:string;
    i,j:integer;

begin

  Writeln('Input string:');
  Readln(InputStr);

  SetLength(PunctuationMarksCount, Length(PunctuationMarks));
  for i:=0 to Length(PunctuationMarksCount)-1 do
    PunctuationMarksCount[i]:=0;

  for i:=1 to Length(InputStr) do
  begin
    for j:=1 to Length(PunctuationMarks) do
    begin
      If InputStr[i]=PunctuationMarks[j] then
      begin
        PunctuationMarksCount[j-1]:= PunctuationMarksCount[j-1] + 1;
        break;
      end;
    end;
  end;

  for i:=1 to Length(PunctuationMarks) do
  begin
    Writeln(PunctuationMarks[i],' ',PunctuationMarksCount[i-1]);
  end;



  Readln;
end.
Если помог, буду очень благодарен за Ваш отзыв (весы в левой нижней части сообщения).
Krasiosoft вне форума Ответить с цитированием
Старый 30.06.2015, 23:01   #6
min@y™
Цифровой кот
Старожил
 
Аватар для min@y™
 
Регистрация: 29.08.2014
Сообщений: 7,629
По умолчанию

Я чот не вкурю: это задача на множества или по работе с принтером?
Расскажу я вам, дружочки, как выращивать грибочки: нужно в поле утром рано сдвинуть два куска урана...
min@y™ вне форума Ответить с цитированием
Старый 01.07.2015, 00:11   #7
Arigato
Высокая репутация
СуперМодератор
 
Аватар для Arigato
 
Регистрация: 27.07.2008
Сообщений: 15,543
По умолчанию

Напечатать можно и на экране монитора. Уже же этот вопрос с вами обсуждали.
Хотя я обычно в задачах формулирую "вывести на экран".
Arigato на форуме Ответить с цитированием
Старый 01.07.2015, 00:17   #8
min@y™
Цифровой кот
Старожил
 
Аватар для min@y™
 
Регистрация: 29.08.2014
Сообщений: 7,629
По умолчанию

Цитата:
я обычно в задачах формулирую "вывести на экран".
я, обычно, тоже. а акцентируя на слове "напечатать", я просто пытаюсь сделать этот мир чуточку проще...

Ну, ведь, не во вред же? согласись.
Расскажу я вам, дружочки, как выращивать грибочки: нужно в поле утром рано сдвинуть два куска урана...
min@y™ вне форума Ответить с цитированием
Старый 01.07.2015, 00:27   #9
Krasiosoft
Форумчанин
 
Аватар для Krasiosoft
 
Регистрация: 01.06.2015
Сообщений: 497
По умолчанию

Проверил, можно не освобождать память за array и string, т.к. после окончания процедуры или функции память освобождаться автоматически. Но при необходимости можно освободить память и во время выполнения процедуры или функции. Кусок кода, чтоб это можно было проверить:

Код:
procedure MyProc1;
var TempArray:array of byte;
    TempString:string;
begin
//  выделяем 100 МБ под массив
  SetLength(TempArray,$6400000);
//  выделяем 100 МБ под строку
  SetLength(TempString,$6400000);

//  если нужно освободить память до выхода из процедуры/функции, это можно сделать так:
//  освобождаем память для массива
  SetLength(TempArray,0);
//  освобождаем память для строки
  SetLength(TempString,0);
end;

procedure MyProc2;
var TempArray:array of byte;
    TempString:string;
begin
//  выделяем 100 МБ под массив
  SetLength(TempArray,$6400000);
//  выделяем 100 МБ под строку
  SetLength(TempString,$6400000);
//  если нужно освободить память до выхода из процедуры/функции, это можно сделать так:
//  освобождаем память для массива
  TempArray:=nil;
//  освобождаем память для строки
  TempString:='';
end;

procedure MyProc3;
var TempArray:array of byte;
    TempString:string;
begin
//  выделяем 100 МБ под массив
  SetLength(TempArray,$6400000);
//  выделяем 100 МБ под строку
  SetLength(TempString,$6400000);
end;

procedure MyProc4;
var TempArray:array of byte;
    TempString:string;
begin
//  выделяем 100 МБ под массив
  SetLength(TempArray,$6400000);
//  выделяем 100 МБ под строку
  SetLength(TempString,$6400000);
end;



begin
  MyProc1;
  MyProc2;
  MyProc3;
  MyProc4;

  Readln;
end.
Все описанные выше процедуры освобождают за собой память, что можно проверить через диспетчер задач.
Если помог, буду очень благодарен за Ваш отзыв (весы в левой нижней части сообщения).
Krasiosoft вне форума Ответить с цитированием
Старый 01.07.2015, 00:36   #10
min@y™
Цифровой кот
Старожил
 
Аватар для min@y™
 
Регистрация: 29.08.2014
Сообщений: 7,629
По умолчанию

Цитата:
Проверил, можно не освобождать память за array и string
Это было проверено ещё до твоего рождения, ибо создателями компайлера эта фича была задумана изначально и называется "финализируемые типы данных".

однако, мы отвлеклись... что у тебя не получается там с множествами-то?
Расскажу я вам, дружочки, как выращивать грибочки: нужно в поле утром рано сдвинуть два куска урана...
min@y™ вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Строки. Дана строка символов,среди которых есть двоеточие ( : ). Определить сколько символов ему предшествуют. Un1q Паскаль, Turbo Pascal, PascalABC.NET 2 11.12.2013 14:52
Дана строка символов - найти слова с одинаковыми буквами Almos Паскаль, Turbo Pascal, PascalABC.NET 1 22.06.2012 02:20
Дана строка символов. Подсчитать, сколько различных символов встречаются в ней. Вывести их на экран Алена_=))) Microsoft Office Word 1 17.06.2012 21:04
Дана строка символов в одной ячейке. Anton777 Помощь студентам 2 30.05.2011 09:49
Дана последовательность символов (строка). Группу символов, разделенную с одной или обеих сторон пробелам viper1941 Паскаль, Turbo Pascal, PascalABC.NET 1 14.04.2011 08:46