![]() |
Вопрос по TurboPascal'ю(safe Warchief)
Ребята помогите пожалуйста со следующей програмой.
Програма должна перевести введённые числа в тип string, и короткую строку дополнить спереди нулями до длины большей строки и вывести на экран.Это тот кусок проги который я и сам могу, а вот дальше никак.Помогите плиз очень надо! Program ASD; uses wincrt; var dlina1, dlina2:byte; chislo1,chislo2:string[40]; begin writeln ('задайте первое число'); readln(chislo1); writeln ('задайте второе число') readln (chislo2); dlina1:= length (chislo1); dlina2:= length (chislo2); if dlina1>dlina2 then dlina1:= abs(dlina1-dlina2); |
а если dlina2 больше dlina1, то что тогда? и еще, в данном участке у тебя теряется значение dlina1.
даже этот участок кода содержит алгортмическую ошибку. постараюсь сегодня вечером набросать пример и прикрепить. |
Заголовок проги допишешь сам. Я приведу только тело.
begin writeln ('задайте первое число'); readln(chislo1); writeln ('задайте второе число') readln (chislo2); dlina1:= length (chislo1); dlina2:= length (chislo2); dlina:= abs(dlina1-dlina2); strdop := ''; for i := 1 to dlina do strdop := concat('0', strdop); if dlina1 > dlina2 then chislo2 := concat(strdop, chislo2) else chislo1 := concat(strdop, chislo1); writeln ('вывод первого числа: '); writeln (chislo1); writeln ('вывод второго числа: '); writeln (chislo2); end. |
Спасибо большое друг!
|
Warchief
Если что, обращайся! ;) |
Помогите решить ещё одну задачу на ТурбоПаскале плиз!
Вот сама задача: В двумерном массиве должны быть сгенирированы 20 случайных чисел из любого интервала(скажем от 1 до 255) и нужно вычислить сколько чисел из этих 20 не делятся на 2 без остака, и вывести эти числа на экран. Плиз помогите очень нужноо!!! :молись: |
Warchief
Не волнуйся, сщас с работы домой приду и посмотрю. (На работе паскаля нет ;) ) |
Код:
VAR Код:
if Odd(a[i]) then и т.д. |
nibl
Спасибо ОГРОМНОЕ, очень сильно выручил :yees: :yees: :yees: :yees: :beer: :ржать:, жаль нельзя поставить большое кол-во оценок, а то бы я наставил :biggrin: Slanj Спасибо и тебе, хотел помочьросто не успел :biggrin: Ну и 2 вопроса ещё к вам: объясните пожалуйста, что означает строка: array[1..4,1..5], а именно почему интервалы записаны через запятую и почему их тут два. И как он генерит 20 случайных чисел, если нигде в иходнике не упоминается число 20? :confused: |
Ну уж если я не успел с прогой помочь, то хоть обьясню немного. array[1..4,1..5] - тебе же двухмерный массив нужен был, так вот ты и получил массив высотой 4 и шириной 5 (еще можно сказать матрица). Через запятую интервалы (размерности) написаны потомучто у паскаля синтаксис такой. Программа генерирует 20 чисел, так как у твоего массива количество элементов 20 (помнож 5 на 4, примерно как площадь :) ) . Например, если ты создаш массив mas : array [1..7,1..4] - то у тебя массив высотой 7 и шириной 4, а обратившись к его элементу array[2,3], ты получиш элемент, который нахдится во втором столбце, третей стороке. Надеюсь, не очень плохо описал. Если что - спрашивай.
|
Slanj
Спасибо всё понятно объяснил :yees: Тогда ещё один вопрос, если можно :rolleyes: Как бы выглядела программа с массивом такого типа: a: array[1..20] of Integer; Так думаю я: VAR a: array[1..20] of Integer; i,Count: Integer; BEGIN Randomize; for i := 1 to 20 do a[i] := Random(255)+1; Count := 0; for i := 1 to 20 do if (a[i] mod 2) <> 0 then begin Inc(Count); Write(a[i],' '); end; WriteLn; WriteLn('Найдено ',Count,' нечетных чисел.'); ReadLn; END. Правильно ли это? |
1. Обращение a[i] к двумерному массиву (матрице) неверно, надо использовать a[i,j]
2. Немного сменится алгоритм - например можно сделать так: for i=1 to 20 do for j=1 to 20 do if (a[i,j] mod 2)=0 then inc(count); end; writeln('Найдено ', count, 'чисел'); вот и все. PS тока не помню, mod остаток от деления или div =) |
Цитата:
Почему в ниже приведённом коде не прога не показывает кол-во нечётных чисел? Код:
VAR |
У меня вроде твоя заработала.
На, вот эта работает program tipavot; uses crt; VAR a: array[1..20] of Integer; i, Count: Integer; BEGIN clrscr; Randomize; for i := 1 to 20 do a[i] := Random(255)+1; Count := 0; for i := 1 to 20 do begin if (a[i] mod 2) <> 0 then begin Inc(Count); Write(a[i],' ' ); end; end; WriteLn; WriteLn('Naideno ',Count,' nechetnih chisel.' ); ReadLn; END. |
Slanj
Спасибо большое, просмотрел внимательно ещё раз иходник, поудалял коментарии и всё тоже заработало :biggrin: . Я просто незаметил и поставил на коментарии обычную скобку ")", а не такую "}" . Так бы и не нашёл причину если бы не ты. :молись: |
Да ладно, ничего страшного. Просто я смотрю, вроде все нормально.
|
Людиии помогите пожалуйста ещё раз!!! Надо написать программу на TP которая бы генерировала в матрице(array[1..6,1..6]) восемнадцать случайных чисел и дублировала их все.Должно получиться 18 чисел в матрице каждое должно повторяться два раза, чтобы получилось в общей сложности 36, но положение этих чисел должно быть случайное(по типу игры "memory"). И в конце концов надо выдать эту матрицу в виде квадрата 6 на 6 в виде звёздочек.
Пожалуйста помогите написать прогу, а то я как ни бился могу только сгенирировать эти числа и выдать ввиде звёздочек только в строчку, а не в квадрате. :молись: :молись: :молись: :молись: :молись: :молись: . Вопрос жизни и смерти :молись: Прога нужна на завтра :confused: :mad: |
Сформировать, эт пожалуйста:
Код:
uses |
Ghost
Ты лучший!!!!! :claps: Ура!! Со звёздочками я имел ввиду что эту матрицу он должен был написан не в числах а в виде звёздочек (*). А так это уже то, что мне нужно. :beer: :ржать: :claps: :молись: |
Объясни пожалуйста, что делают переменные: l, m, r и p. А также какое действие выполняет фунция pred и следующий участок кода :
p := true; b[i] := random (99) + 1; for j := 1 to pred (i) do p := p and (b[j] <> b[i]); until p; for l := 1 to 2 do begin repeat r := random(n) + 1; m := random(n) + 1; until a[r, m] = 0; a[r, m] := b[i]; Никак не пойму, что здесь выполняется и зачем используется 2 array'я? Спасибо!!! |
Warchief
Функция pred вычисляет предыдущее число, т.е. вместо pred(i) можно ставить (i - 1). Переменные i, j, l предназначены только для организации циклов. А r, m - содержат случайным образом выбранные два числа - номер строки и столбца в массиве. Переменная p - логическая. Используется для проверки того, что новое сгенерированное число еще отсутствует в массиве. В принципе, это было можно решить с помощью множества (set of byte), только зачем... ;) Участок кода Код:
repeat Код:
for l := 1 to 2 do begin Два массива нужно, чтобы сгенерированные random'ом числа не повторялись. Массив b содержит случайные неповторяющиеся числа, а массив a - по 2 таких же, но расположенные случайным образом. |
Часовой пояс GMT +4, время: 04:13. |
Powered by vBulletin® Version 3.8.5
Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.