Списки. Язык Си 1. Создать список из n (n> 0) элементов (n вводится с клавиатуры), если другое количество элементов не указано в конкретной задаче. 2. Тип ключей (информационных полей) задано по варианту. 3. Значение элементов списка взять самостоятельно такими, чтобы можно было продемонстрировать корректность работы алгоритма программы. ввод значений элементов списка можно выполнить произвольным (случайные числа, формирование значений по формуле, введение из файла или с клавиатуры). 4. Вид списка (очередь, стек, дек, прямой односвязный линейный список, обратный односвязный линейный список, двозвьязний линейный список, односвязный кольцевой список, двозвьязний кольцевой список) выбрать самостоятельно с целью наиболее целесообразного решения поставленной по варианту задачи. 5. Выполнить над созданным списком действия, указанные по варианту, и корректное освобождения памяти списка. 6.(Важно) При выполнении заданных действий, выводе значений элементов и освобождении памяти списке считать, что длина списка (количество элементов n или 2n) неизвестна на момент выполнения этих действий. 7. Повторяющиеся части алгоритма необходимо оформить в виде процедур или функций (для создания, обработки, вывода и освобождения памяти списков) с передачей списка с параметра(ов).
Перевод условия задачи: Ключами элементов списка являются целые числа. Выполнить циклический сдвиг элементов списка на k позиций вправо (k - натуральное и не превышает количества элементов списка). При необходимости разрешается использовать еще один список, другие структуры данных, кроме простых переменных, использовать запрещается.
Uses crt; const max=15; var a : array[1..max] of integer; i,k0,k1,k3 : integer; k:boolean; begin randomize; k0:=0; k1:=0; writeln('исходные:'); for i:=1 to max do begin a[i]:=random(2); write(a[i]:4); end; for i:=1 to 15 do begin if a[i]=0 then inc(k0) else inc(k1); if a[i]<>0 then k:=true; if k=false then inc(k3); end; writeln; writeln('количество нулей = ',k0); writeln('количество единиц = ',k1); writeln('количество нулей до первой единицы = ',k3); End.
const max=15;
var a : array[1..max] of integer;
i,k0,k1,k3 : integer;
k:boolean;
begin
randomize;
k0:=0;
k1:=0;
writeln('исходные:');
for i:=1 to max do
begin
a[i]:=random(2);
write(a[i]:4);
end;
for i:=1 to 15 do
begin
if a[i]=0 then inc(k0) else inc(k1);
if a[i]<>0 then k:=true;
if k=false then inc(k3);
end;
writeln;
writeln('количество нулей = ',k0);
writeln('количество единиц = ',k1);
writeln('количество нулей до первой единицы = ',k3);
End.
---
Решение
Для начала определим значение переменных
А=1 (высказывание истинно)
B=1 (высказывание истинно)
C=1 (высказывание истинно)
D=0 (высказывание ложно)
E=0 (высказывание ложно)
Перейдем к выражениям.
¬ - логическое отрицание (не)
˅ - логическое сложение (или)
˄ - логическое умножение (и)
Как это выглядит в формулах привычными для нас символами (кроме "не". отрицание остается), замени сразу же переменные известными нам значениями:
1. A˄B˅¬C = A*B+ ¬C =1*1+ ¬1=1*1+0 = 1+0 = 1
2. A˄D˅¬E = A*D+ ¬E = 1*0+ ¬0=1*0+1 = 0+1 = 1
3. A˄B˅¬D = A*B+ ¬D = 1*1+ ¬0=1*1+1 = 1+1 = 1 (у нас же логическое выражение)
4. D˄E˅A = D*E+A = 0*0+1 = 0+1 = 1
Таким образом, получаем 1111