Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Основная";
Текущий архив: 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
1-27570
big_bugzy
2003-09-29 15:05
2003.10.09
Как получить список всех открытых окон?


3-27370
P0tia
2003-09-18 19:51
2003.10.09
Проблема с Excel


1-27592
ivc_andr
2003-09-29 09:52
2003.10.09
как сделать чтоб не отображалась запущенная программа?


1-27559
Raptorus
2003-09-29 15:54
2003.10.09
Здравствуйте, Мастера. Подскажите пожалуйста как можно вызвать


4-27791
Rel_
2003-08-05 10:43
2003.10.09
Отрисовка в заданной области





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский