Форум: "Основная";
Текущий архив: 2003.10.09;
Скачать: [xml.tar.bz2];
ВнизПоиск в масиве символов Найти похожие ветки
← →
Winam (2003-09-27 16:23) [0]помогите плиз решить задачу.
Введите символьный масив из 11 элементов и постройте второй массив, который содержит Большие буквы латинского алфавита из первого массива.
Вот как я сделал, только это не работает.
type
Tar=array[1..11] of char;
Tar2=array[1..11] of char;
var
M:Tar;
A:Tar2;
function Def(M:tar;A:tar2):char;
Var i:integer;
begin
i:=1;
while (i>=1) and (i<=11) do
begin
if (M[i]>="A") and (M[i]<="Z")
then M[i]:=A[i];
i:=i+1;
end;
Def:=A[i];
end;
procedure TForm1.Button1Click(Sender: TObject);
Var i:integer;
begin
for i:=1 to 11 do
begin
M[i]:=StringGrid1.Cells[i-1,0][1];
StringGrid2.Cells[i-1,0]:=A[i];
end; end;
Подскажите плиз в чом ошибка. Я просто для себя решаю задачи и пока не очень понимаю в символьном типе.
← →
HolACost! (2003-09-27 16:59) [1]Во первых что тв написал? Где и что не работает - у тебя глобальная переменная имее более нихкий приооритет в процедуре если её параметр такое имя имеет! И сл-но что не работает - если ты не вызываешь эту функцию!
Во-вторых. есть цикл фор!
← →
Palladin (2003-09-27 17:02) [2]ну в принципе интересно :)
а правда где ты ее вызываешь? :)
← →
HolACost! (2003-09-27 17:06) [3]Это оптимизация, но где туту " который содержит Большие буквы латинского алфавита из первого массива" - ты поясни что делаешь-то?
function Def(M: tar; A: tar2): char;
var i: integer;
begin
for i:=1 to 11 do
if M[i] in ["A".."Z"] then M[i] := A[i];
Def := A[i];
end;
← →
Тих (2003-09-27 17:10) [4]Щас развернется флейм на самый эффективный алгоритм для самой пустяковой задачи :)
Во-первых, массив символов - это обычный string или PChar.
Если препода устроит и ты пишешь на Delphi, то можно просто вызвать AnsiUpperCase для этой строки, если не устроит или ты пишешь на TurboPascal - вычитай в цикле из каждого кода символа 65.
← →
HolACost! (2003-09-27 17:12) [5]>> Тих ты смысл функции понял, я нет!
← →
Winam (2003-09-27 17:17) [6]Я организовіваю два масива.
type
Tar=array[1..11] of char; //первый SG (ввод букв)
Tar2=array[1..11] of char;//второй SG (выводятся Буквы с большим регистром из первого)
var
M:Tar;
A:Tar2;
ну и потом даже с этой фонкцией
function Def(M: tar; A: tar2): char;
var i: integer;
begin
for i:=1 to 11 do
if M[i] in ["A".."Z"] then M[i] := A[i];
Def := A[i];
end;
во втрой стринг грид выводятся только пробелы.
← →
HolACost! (2003-09-27 17:25) [7]Мтт! Ты коментарии мои видел - где ты её вызываешь и по поводу одноименных параметров и переменных? Ещё раз прочитай!
← →
PVOzerski (2003-09-27 17:26) [8]Если я правильно понял:
if (M[i]>="A") and (M[i]<="Z")
then {M[i]:=A[i];}A[i]:=M[i];
Это как минимум. Но дальше вообще много странного. Дорогой Winam, Вам бы разобраться: что такое глобальные, локальные переменные и параметры, что такое передача параметров по значению и по ссылке, как вызывать функции... :^((((((((((((((
← →
Igorek (2003-09-27 17:33) [9]Не так все.
type
M = array[1..11] of char;
function f(M1: array of char): array of char;
var
I, J: Integer;
begin
J := 1;
for I := 1 to 11 do
if (M[I] in ["A".."Z"]) or (M[I] in ["a".."z"]) then
begin
Result[J] := AnsiUpperCase(M[I]);
Inc[J]
end;
end;
← →
HolACost! (2003-09-27 17:36) [10]>>Igorek © (27.09.03 17:33) [9]
Точно - особенно поднимать буквы, которая уже поднята!
И докучи это можно сделать и сразу - см help!
А вот мы (я) хотим узнать - как онт её юзает и где и почему параметры такие интересные!
← →
PVOzerski (2003-09-27 17:41) [11]type
M = array[1..11] of char;
function Def(const M1: M):AnsiString;
var
I, J: Integer;
begin
Result:="";
J := 1;
for I := 1 to 11 do
if M1[I] in ["A".."Z"] then
begin
SetLength(Result,J);
Result[J] := M1[I];
Inc(J)
end;
end;
И.. человек ничему не научился...
← →
Тих (2003-09-27 17:42) [12]Ну здрасьте.
Во-первых, здесь -
function Def(M: tar; A: tar2): char;
у тебя в стек функций передаются копии твоих массивов. При выходе из нее они разрушаются. Уж правильнее тогда
function Def(var M, A: tar): char;
или даже
function Def(const M: tar; var A: tar): char;
Во-вторых, не понятно, зачем эту функцию делать функцией, раз выходной параметр у тебя, я так понял - "A". Сделай ее процедурой.
В-третьих, выходной массив я бы сделал динамическим. Его можно возвращать как PCHar. Снова делаем процедуру функцией, но потом не забываем возвращать память.
type
TLetters = array[0..11] of char;
function UCase(const Arr: TLetters): PChar;
var
lArr: TLetters;
i, j: integer;
begin
FillChar(lArr, sizeof(Arr), #0);
j := 0;
for i := 0 to sizeof(Arr) - 1 do
if (Arr[i] in ["A".."Z"]) then
begin
lArr[j] := Arr[i];
Inc(j);
end;
Result := StrAlloc(StrLen(lArr) + 1);
StrCopy(Result, @lArr[0]);
end;
procedure TForm1.Button1Click(Sender: TObject);
var Res: PCHar;
begin
Res := UCase("AsZaaaa");
ShowMessage(Res);
StrDispose(Res);
end;
← →
HolACost! (2003-09-27 17:47) [13]мтт! Может человека подождём - он разъяснит, что ему надо-то!!!!
← →
Тих (2003-09-27 17:49) [14]> PVOzerski © (27.09.03 17:41) [11]
Мдя :) разница лишь в стиле :))
← →
Winam (2003-09-27 17:52) [15]Я не знаю. Мне нужно решить задачу. Из того что Вы сказали я почти ничего не понял. Я только начал учить.
Спасибо.
← →
HolACost! (2003-09-27 18:31) [16]Ты полную формулировку задачи напиши - чем смогу - помогу!
← →
Winam (2003-09-27 19:02) [17]Введите символьный масив из 11 элементов и постройте второй массив, который содержит Большие буквы латинского алфавита из первого массива.
Это и есть полная формулировка.
← →
Palladin (2003-09-27 20:03) [18]Compatable with TP3,4,5,5.5,6,7, Delphi 1-7 (Win32 Console App)
var
a,b:array [1..11] of char; { a - весь массив b - массив с большими буквами}
c, {количество больших букв}
i:integer;
begin
writeln("Ввод массива (только латинские символы)");
c:=0;
for i:=1 to 11 do
begin
write("A[",i,"]:=");
readln(a[i]);
if a[i]=UpCase(a[i]) then
begin
c:=c+1;
b[c]:=a[i];
end;
end;
writeln("Весь массив:");
for i:=1 to 11 do write(a[i]:2);
writeln;
if c=0 then writeln("Больших букв в массиве нет") else
begin
writeln("Массив больших букв");
for i:=1 to c do write(b[i]:2);
writeln;
end;
writeln("Это было совсем не сложно.");
end.
← →
Igorek (2003-09-27 23:20) [19]Сорри, недосмотрел условие и байду написал.
Страницы: 1 вся ветка
Форум: "Основная";
Текущий архив: 2003.10.09;
Скачать: [xml.tar.bz2];
Память: 0.49 MB
Время: 0.009 c