profile
Опубликовано 6 лет назад по предмету Информатика от W1980

Нужно написать программу...

Задание:

 

Адрес, запрашиваемый пользователем, обычно состоит из четырех частей, из которых первые три являются доменными именами различного уровня и разделены точками, а последняя отделена от них двоеточием и является портом, к которому обращается пользователь. Например, при обращении пользователя к www.ifmo.ru:8080 слово ru является доменным именем первого уровня, слово ifmo — доменным именем второго уровня, слово www — доменным именем третьего уровня, а 8080 является портом.

Вам необходимо по списку запросов пользователей в таком формате перечислить все различные порты, к которым обращались пользователи.

Формат входного файла

В первой строке входного файла input.txt находится одно натуральное число n (1 ≤ n ≤ 100) — количество адресов в данном вам списке. В следующих n строках содержатся сами адреса в формате, описанном выше.

Все доменные имена всех уровней состоят только из строчных букв латинского алфавита, а порты — только из цифр. Длина любого данного вам адреса не превышает 250 символов.

Формат выходного файла

В первой строке выходного файла output.txt выведите одно целое число k — количество различных портов, к которым обращались пользователи. В следующих k строках выведите сами порты. Каждый порт должен быть выведен ровно один раз в отдельной строке. Порты могут быть выведены в любом порядке.

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

input.txt


3
www.ifmo.pl:3389
www.ya.pl:65535
www.ifmo.kz:3389

 

output.txt

2
65535
3389

  1. Ответ
    Ответ дан DesertAnOrchid

    PROGRAM_PORT;

    VAR

    n,c,i:integer;
    s,s1:string;
    a:array [1..1000] of string;
    b:boolean;
    BEGIN
    Assign(input,'input.txt'); reset(input);
    Assign(output,'output.txt'); rewrite(output);
     READLN(input,n);
    b:=true;
    c:=0;
     WHILE n<>0 do

    BEGIN
    Readln(input,s);
     WHILE s[1]<>'.' do delete(s,1,1);
    delete(s,1,1);
      s1:=Copy(s,1,pos('.',s)-1);


    FOR i:=1 to c do
    IF a[i]=s1 then begin
    b:=false;
    break;
    end;
    IF b then begin
                    inc(c);
                    a[c]:=s1;
                    End;

    b:=true;
    dec(n);
    End;

    WRITELN(output,c);
    FOR i:=1 to c do writeln(output,a[i]);

    Close(input);
    Close(output);
    END.

  2. Ответ
    Ответ дан glebglebgleb

    Задачка из олимпиады) Простенькая вроде программулька

    var
    n,i,k,j,f:integer;
    m:array [1..100] of string;
    p:array[1..100] of string;
    sl,por:string;
    b:boolean;
    f1,f2:text;
    begin
    assign(f1, 'input.txt');
    reset(f1);
    readln(f1,n);
    for i:=1 to n do
    readln(f1,m[i]);
    close (f1);

    k:=0;
    for i:=1 to n do begin
    por:='';
    b:=false;
    sl:=m[i];
    for j:=1 to length(sl) do begin
    if (Ord(sl[j])>=48) and (Ord(sl[j])<=57) then
    por:=por+sl[j];
    end;
    for f:=1 to k do begin
    if por=p[f] then
    b:=true;
    end;
    if b=false then begin
    k:=k+1;
    p[k]:=por;
    end;
    end;
    assign(f2, 'output.txt');
    rewrite(f2);
    writeln (f2,k);
    for i:=1 to k do
    writeln (f2,p[i]);
    close (f2);
    end.

Самые новые вопросы