Односвязный список имеет следующую структуру узла
typedef struct node {
int value;
struct node *next;
} node;
Напишите функцию find(корень, значение), которая возвращает указатель на узел, имеющий заданное значение. Если такого значения нет, то функция должна возвращать NULL.
#include
#include
typedef struct node {
int value;
struct node *next;
} node;
// определение функции find
...
int main()
{ node *root=NULL;
// root->NULL
add(&root,1);
// root->[1]->NULL
add(&root,2);
// root->[2]->[1]->NULL
node *n1=find(root,1);
if(n1) n1->value=3; // заменим 1 на 3
n1=find(root,1);
if(n1==NULL) printf("NULL\n"); // NULL
}
В строке 's2:= s2 + s1[i] + s1[i];'
По умолчанию все переменные равны нулю
т.к. вы не задали значение i и вводите эту строку вне цикла for, то получается что вы запрашиваете нулевой элемент массива s1, при том что нумерация начинается с единицы, поэтому и выдаёт ошибку.
"Индекс находится вне границ массива"
Верный код программыprogram raf105;
var s1,s2:string;
i:integer;
begin
writeln('Введите строку');
readln(s1);
s2:='';
for i:=1 to length(s1) do
s2:= s2 + s1[i] + s1[i];
writeln(s2);
end.
program raf105;
var a:array[1..100,1..2] of char;
glas,s:string;
i,j,sumglas:integer;
begin
glas:='аеёиоуыэюя'; // Перечисление гласных
for i:=1 to length(glas) do
a[i,2]:= glas[i]; //Заполнение второй строки для гласных
writeln('Введите строку');
readln(s);
for i:=1 to length(s) do
a[i,1]:= s[i]; //Заполнение первой строки для введённых букв
for i:=1 to length(s) do
for j:=1 to length(glas) do
if a[i,1] = a[j,2] //если символ из строки 1 = символу из строки 2
then sumglas:= sumglas+1; //Прибавление единицы к счётчику
writeln('В строке ',sumglas,' гласных');
end.