Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2003.10.09;
Скачать: CL | DM;

Вниз

Поиск в масиве символов   Найти похожие ветки 

 
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;
Скачать: CL | DM;

Наверх




Память: 0.51 MB
Время: 0.018 c
3-27388
Bless
2003-09-18 17:15
2003.10.09
Как посмотреть IB-базу?


1-27496
Zhouck
2003-09-26 16:36
2003.10.09
Допустим у нас есть ClassName фрейма


3-27340
Denizzz
2003-09-20 07:50
2003.10.09
Работа с Excel


14-27701
Layner
2003-09-19 11:45
2003.10.09
Кредитка по минимуму. Или кто чем пользуется.


1-27583
Bezpal
2003-09-29 12:33
2003.10.09
Кто знает серийный и регистрационный номер для 5 Delphi?