IPB
ЛогинПароль:

> Прочтите прежде чем задавать вопрос!

1. Заголовок темы должен быть информативным. В противном случае тема удаляется ...
2. Все тексты программ должны помещаться в теги [code=pas] ... [/code], либо быть опубликованы на нашем PasteBin в режиме вечного хранения.
3. Прежде чем задавать вопрос, см. "FAQ", если там не нашли ответа, воспользуйтесь ПОИСКОМ, возможно такую задачу уже решали!
4. Не предлагайте свои решения на других языках, кроме Паскаля (исключение - только с согласия модератора).
5. НЕ используйте форум для личного общения, все что не относится к обсуждению темы - на PM!
6. Одна тема - один вопрос (задача)
7. Проверяйте программы перед тем, как разместить их на форуме!!!
8. Спрашивайте и отвечайте четко и по существу!!!

2 страниц V  1 2 >  
 Ответить  Открыть новую тему 
> Записи с файлами
сообщение
Сообщение #1


Гость






Умоляю помочь сделать данную задачу до завтрашнего дня!!!!!Очень прошу!!Сам вышел из больницы 2 дня назад и в первый же день учебы лабараторная по паскалю на котором я был всего на 1-2 лекциях а потом загремел по состоянию здоровья в больницу!!!Пожалуйста!!!!

Код
Полугодовая информация о изданиях по каждому подчиненному имеет следующую структуру:
ФИО - 20 знаков
участок доставки - 2 знака
адрес
кол-во выписанных изданий - 2 знака
список изданий
адрес в свою очередь состоит из следующих компонентов:
                                улица - 20 знаков
                                номер дома - 3 знака
                                номер квартиры - 3 знака
Список изданий состоит из следующих компонентов:
                                название - 20 знаков
                                вид - 1 знак(газета, журнал)
                                месяцы на которые оформлена подписка.
Список изданий представляет собой массив структур, содержащий N элементов из которых заполнены K - количествовыписанных изданий.Если подписчик оформил подписку на более чем N изданий то для него имеется 2 или более записи идущие подряд.Информация о месяцах подписки может быть представлена в виде массива из 12 логических элементов.
А теперь само задание :) : создайте файл о подписных изданиях.                
 К началу страницы 
+ Ответить 
сообщение
Сообщение #2


Гость






Код

Const
 N = 20;
Type
 TMonths=Array[0..1] Of Boolean;
 TIzdanie=Record
   Title:Strin[20];
   Tip:Char;
   Months:TMonth
 End;
 TAddr=Record
   Street:String[20];
   Home:String[3];
   Flat:String[3]
 End;
 TChel=Record
   Name:String[20];
   Uchastok:String[2];
   Addr:TAddr;
   Count:String[2];
   Izdaniya:Array[0..N-1] Of TIzdan
 End;

Const
 Names:Array[0..2] Of String = ('Ivanov','Petrov','Sidorov'); {Дополнишь сам}
 Streets:Array[0..2] Of Stirng = ('Pervaya','Vtoraya','Tretyaya'); {См. выше}
 Titles:Array[0..2] Of String = ('Programmer','Lamer','Sysop'); {Ну ты догадался}
 Tips:Array[0..2] Of Char = ('G','J','D'); {Буквы на угад. Типы изданий.}
 MName:Array[0..1] Of String = ('Jan','Feb','Mar','Apr','May','Jun','Jul','Aug','Sep','Oct','Nov','Dec');
Var
 Chels:Array[1..100] Of TChel;
 TotalChels:Integer;
 TotalRecords:Integer;

{Придумывает человечка и сохраняет его в массиве}
Procedure GenerateChel;
Var
 x,i,j:Integer;
Begin
 With Chels[TotalRecords] Do
 Begin
   Name:=Names[Random(3)];              {Придумаем имя}
   Str(Random(100),Uchastok);              {Придумаем участок}
   Addr.Street:=Streets[Random(3)];      {Придумаем улицу}
   Str(Random(1000),Addr.Home);          {Дом}
   Str(Random(1000),Addr.Flat)              {Квартиру}
   x:=Random(50)+1;                            {Вот столько изданий он и выписал}
   Str(x,Count);
 End;
 {Придумаем ему издания}
 For i:=0 To x-1 Do
   With Chels[TotalRecords+(i Div N)].Izdaniya[i Mod M] Do
   Begin
     Title:=Titles[Random(3)];    {Название}
     Tip:=Tips[Random(3)];        {Тип}
     For j:=0 To 11 Do
       Months[j]:=Random(2)=0;  {Месяцы подписки}
   End;
 Inc(TotalRecords,x Div N)
End;

Var
 f:Text;
 i,j,k,x,e:Integer;

Begin
 Randomize;
 TotalChels:=Random(30); {Не более 30 человек, где 0 значит, что 1 чел
                                         всё-таки есть}
 TotalRecords:=0;                    {В массиве Chels пока ничего нет}
 For i:=0 To TotalChels Do  {придумаем всех челов}
   GenerateChel;

 Assign(f,'Chels.Txt');   {Создадим файл}
 ReWrite(f);

 i:=0;
 While i < TotalRecords Do   {И скинемтуда все записи}
 Begin
   With Chels[i] Do
   Begin
     WriteLn(f,Name);
     WriteLn(f,'  From Uchastok ',Uchastok);
     WriteLn(f,'  That Lives At ',Addr.Street,' in house #',Home,' in flat ',Flat);
     WriteLn(f,'  Subscribed For ',Count,' izdaniy:');
     Val(s,x,e)
   End;
   For j:=0 To x-1 Do
     With Chels[i + (j Div N)].Izdaniya[j Mod N] Do
     Begin
       Write(f,Ttitle,' (',Tip,') :');
       For k:=0 To 11 Do
         If Months[k] Then
           Write(f,MName[k]);
       WriteLn(f)
     End;
   Inc(i,1 + (x Div N))
 End;

 Close(f)
End.

Должно быть так.
сли что не так - свисти, отвечу.
 К началу страницы 
+ Ответить 
сообщение
Сообщение #3


Гость






Простите пожалуйста, но у вас целая куча ошибок!!!Такие как неправильное название stirng вместо string я исправил но там остались какие-то непонятные!!!Памагите пожалуйста!!!
 К началу страницы 
+ Ответить 
сообщение
Сообщение #4


Гость






Я с работы писал - там у меня компилятора нет.
Ща перепроверю ближе к вечеру пришлю.
 К началу страницы 
+ Ответить 
сообщение
Сообщение #5


Гость






Код

Const
N = 20;
Type
TMonths=Array[0..1] Of Boolean;
TIzdanie=Record
  Title:String[20];
  Tip:Char;
  Months:TMonths
End;
TAddr=Record
  Street:String[20];
  Home:String[3];
  Flat:String[3]
End;
TChel=Record
  Name:String[20];
  Uchastok:String[2];
  Addr:TAddr;
  Count:String[2];
  Izdaniya:Array[0..N-1] Of TIzdanie
End;

Const
Names:Array[0..2] Of String = ('Ivanov','Petrov','Sidorov'); {Дополнишь сам}
Streets:Array[0..2] Of String = ('Pervaya','Vtoraya','Tretyaya'); {См. выше}
Titles:Array[0..2] Of String = ('Programmer','Lamer','Sysop'); {Ну ты догадался}
Tips:Array[0..2] Of Char = ('G','J','D'); {Буквы на угад. Типы изданий.}
MName:Array[0..11] Of String = ('Jan','Feb','Mar','Apr','May','Jun','Jul','Aug','Sep','Oct','Nov','Dec');
Var
Chels:Array[0..100] Of TChel;
TotalChels:Integer;
TotalRecords:Integer;

{Придумывает человечка и сохраняет его в массиве}
Procedure GenerateChel;
Var
x,i,j:Integer;
Begin
With Chels[TotalRecords] Do
Begin
  Name:=Names[Random(3)];              {Придумаем имя}
  Str(Random(100),Uchastok);              {Придумаем участок}
  Addr.Street:=Streets[Random(3)];      {Придумаем улицу}
  Str(Random(1000),Addr.Home);          {Дом}
  Str(Random(1000),Addr.Flat);              {Квартиру}
  x:=Random(50)+1;                            {Вот столько изданий он и выписал}
  Str(x,Count);
End;
{Придумаем ему издания}
For i:=0 To x-1 Do
  With Chels[TotalRecords+(i Div N)].Izdaniya[i Mod N] Do
  Begin
    Title:=Titles[Random(3)];    {Название}
    Tip:=Tips[Random(3)];        {Тип}
    For j:=0 To 11 Do
      Months[j]:=Random(2)=0;  {Месяцы подписки}
  End;
Inc(TotalRecords,(x Div N) + Byte((x Mod N) <> 0))
End;

Var
f:Text;
i,j,k,x,e:Integer;

Begin
Randomize;
TotalChels:=Random(30); {Не более 30 человек, где 0 значит, что 1 чел
                                        всё-таки есть}
TotalRecords:=0;                    {В массиве Chels пока ничего нет}
For i:=0 To TotalChels Do  {придумаем всех челов}
  GenerateChel;

Assign(f,'Chels.Txt');   {Создадим файл}
ReWrite(f);

i:=0;
While i < TotalRecords Do   {И скинемтуда все записи}
Begin
  With Chels[i] Do
  Begin
    WriteLn(f,Name);
    WriteLn(f,'  From Uchastok ',Uchastok);
    WriteLn(f,'  That Lives At ',Addr.Street,' in house #',Addr.Home,' in flat ',Addr.Flat);
    WriteLn(f,'  Subscribed For ',Count,' izdaniya:');
    Val(Count,x,e)
  End;
  For j:=0 To x-1 Do
    With Chels[i + (j Div N)].Izdaniya[j Mod N] Do
    Begin
      Write(f,'    ',Title,' (',Tip,') :');
      For k:=0 To 11 Do
        If Months[k] Then
          Write(f,MName[k],' ');
      WriteLn(f)
    End;
  Inc(i,(x Div N) + Byte((x Mod N) <> 0))
End;

Close(f)
End.

Старею... Без компилятора уже трудновато smile.gif
 К началу страницы 
+ Ответить 
сообщение
Сообщение #6


Гость






Храни тебя бог!!!!!!!!!!! smile.gif smile.gif smile.gif smile.gif smile.gif smile.gif smile.gif
 К началу страницы 
+ Ответить 
сообщение
Сообщение #7





Группа: Пользователи
Сообщений: 6

Репутация: -  0  +


BlackShadow друг выручи меня еще раз пожалуйста!!!!!
На эту же задачу тока вот новое задание:

Код
Написать программу обработки файла подписных изданий по данным № месяца и изданию!Найдите количество экземпляров, подлежащих доставке!

Спаси утопающего! sad.gif
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #8


Гость






Аллах акбар!
Я понял так: надо перелопатить файл, созданный прошлой прогой и вычленить оттуда кол-во изданий с указанным названием, на которые кто-нибудь да подписался в указнном месяце. Если так, то лови:
Код

Type
TMonths=Array[0..11] Of Boolean;
TIzdanie=Record
 Title:String[20];
 Tip:Char;
 Months:TMonths
End;
TAddr=Record
 Street:String[20];
 Home:String[3];
 Flat:String[3]
End;
TChel=Record
 Name:String[20];
 Uchastok:String[2];
 Addr:TAddr;
 Count:String[2];
 Izdaniya:Array[0..N-1] Of TIzdanie
End;

Var
 f:File Of TChel;
 IzdName:String;
 SubscrMonth:Integer;
 Total:Integer;
 x,e,i:Integer;
 c:TChel;
Begin
 Write('Enter Name Of Izdanie: ');
 ReadLn(IzdName);
 Write('Enter Month (0..11, where 0 is January): ');
 ReadLn(SubscrMonth);
 Assign(f,'Chels.Txt');
 Reset(f);
 Total:=0;
 While Not Eof(f) Do
 Begin
   Read(f,c);
   Val(c.Count,x,e);
   i:=0;
   While i<x Do
   Begin
     If (i>0) And (i Mod N = 0) Then
       Read(f,c);
     With c.Izdaniya[i Mod N] Do
       If Title = IzdName Then
         If Months[SubscrMonth] Then
           Inc(Total)
   End
 End;
 Close(f);
 WriteLn('Total ',Total,' units of ',IzdName,' will be needed')
End.

Опять с работы, опять без компилятора. Если что - свисти.
 К началу страницы 
+ Ответить 
сообщение
Сообщение #9





Группа: Пользователи
Сообщений: 6

Репутация: -  0  +


BlackShadow ругается на переменную N-ты ее вроде не обозначил?????
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #10


Гость






Забыл.
Ну допиши в начале
Код

Const
 N = 20;

Только смотри, чтобы в обеих прогах N совпадало.
 К началу страницы 
+ Ответить 
сообщение
Сообщение #11





Группа: Пользователи
Сообщений: 6

Репутация: -  0  +


BlackShadow я так и сделал!!Спасиба!!!!
Сдал я сегодня программу а препод как начал меня спрашивать!!!!!Ой!!!!!
Скажи пожалуйста что означают следующие строки??

Код

Total:=0;


Код

Val(c.Count,x,e);


Код

TChel=Record
Name:String[20];
Uchastok:String[2];
Addr:TAddr;
Count:String[2]; (что вот это????)
Izdaniya:Array[0..N-1] Of TIzdanie
End;




И что это за цикл такой и как работает??Почему тут i:=0?
Код

Val(c.Count,x,e);
  i:=0;
  While i<x Do
  Begin
    If (i>0) And (i Mod N = 0) Then
      Read(f,c);
    With c.Izdaniya[i Mod N] Do
      If Title = IzdName Then
        If Months[SubscrMonth] Then
          Inc(Total)
  End


Спасибо большое за все что ты сделал для меня!!! smile.gif smile.gif smile.gif smile.gif smile.gif smile.gif smile.gif
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #12


Гость






Ндя...
Начнём
1). Усвой сразу и навсегда, если ещё собираешься вернуться к программированию: любая переменная обнуляется (число = 0б строка - пустая) при запуске программы ТОЛЬКО В РЕЖИМЕ ОТЛАДКИ! А при обычном запуске на её месте может (с вероятностью 2^SizeOf(Variable):1) отнюдь не 0. Поэтому перед посчётом чего-то там я принудительно обнулил переменную Total. А то ведь могло бы получиться, что 3 человека выписали 148 журналов "Мурзилка" на январь smile.gif
2). Процедура Val преобразует строку в число: Val(Str:String;Var x;Var e:Integer). Первый параметр, понятно, строка, второй - туда куда преобразовывать, третий - код ошибки. Сюда записывается номер первого неверного символа в строке ('ю' например) или 0, если всё пучком. В этой программе кол-во подписок я храню в виде строки, а цикл-то строкой не организуешь - вот и перевожу в число.
3). Вроде уже как и сказал... Count - кол-во изданий, на которые подписан данный чел. Хранится в виде строки для удобства (хотя, может и неудобства, но я так написал).
4). А цикл этот вот что делает. Он перебирает все издания этого чела, проверяет, то ли название у текущей подписки и активна ли она в нужном месяце. Если всё это выполняется, то увеличивает Total. Делается это так. Сначала в x записывается сколько у него вообще подписок. Затем начинаем цикл по i (почему i:=0, надеюсь понятно из п. 1). Внутри цикла сначала проверяем, не пришло ли время считать очередную запись (так как в одной записи может храниться максимум N подписок, а их может быть больше, тогда надо брать сведения из следующей записи, см. условия). после этого выполняются все вышеперечисленные проверки и т. д. для подписки №(i Mod N). Если вдуматься, то можно заметить, что i проходит цикл от 0 до x-1, а i Mod N - от 0 до N-1, но при этом переключаясь на другие записи (как, если ты хочешь сделать 50 шагов, но делаешь их по кругу радиусом в метр). Это вобщем и есть основная задумка всей программы.


Вот, вроде и всё.
 К началу страницы 
+ Ответить 
сообщение
Сообщение #13


Смотрю...
*****

Группа: Пользователи
Сообщений: 1 055
Пол: Мужской
Реальное имя: Пшеничный Алексей Анатольевич

Репутация: -  6  +


Цитата
И что это за цикл такой и как работает??Почему тут i:=0?


А что, препод не знает что это за цикл такой?
:D


--------------------
Если что-то не делает того, что вы запланировали ему делать - это еще не означает, что оно бесполезно.
--------------------
Прежде, чем задать вопрос - Правила :: FAQ :: Поиск
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #14





Группа: Пользователи
Сообщений: 6

Репутация: -  0  +


BlackShadow спасибо друг!!! smile.gif smile.gif smile.gif smile.gif
Вот последнее задание и я получу зачет:

Код

Написать программу обработки файла подписных изданий по заданным ФИО.Распечатать список подписных изданий подписчика(записей, относящихся к одному подписчику может быть несколько)!!!!

Пожалуйста!!!
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #15


Гость






Код

Const
 N = 20;

Type
TMonths=Array[0..11] Of Boolean;
TIzdanie=Record
Title:String[20];
Tip:Char;
Months:TMonths
End;
TAddr=Record
Street:String[20];
Home:String[3];
Flat:String[3]
End;
TChel=Record
Name:String[20];
Uchastok:String[2];
Addr:TAddr;
Count:String[2];
Izdaniya:Array[0..N-1] Of TIzdanie
End;

Const
 MonthName:Array[0..11] Of String=('jan','feb','mar','apr','may','jun','jul','aug','sep','oct','nov','dec');


Var
f:File Of TChel;
Name:String;
c:TChel;
 i,j:Integer;
Begin
Write('Enter Name: ');
ReadLn(Name);
Assign(f,'Chels.Txt');
Reset(f);
While Not Eof(f) Do
Begin
  Read(f,c);
  If c.Name=Name Then
  Begin
    Val(c.Count,x,e);
    i:=0;
    While i<x Do
    Begin
      If (i>0) And (i Mod N = 0) Then
        Read(f,c);
      With c.Izdaniya[i Mod N] Do
      Begin
        Write(Title,': ');
        For j:=0 To 11 Do
          If (Monts[j]) Then
            Write(MonthName[j]);
        WriteLn
      End;
      Inc(i)
  End
End;
Close(f)
End.

Вроде так...
Если "вывод на печать" подразумевает принтёр, то добавь в начало Uses Printer; и допиши пару строк:
Код

      With c.Izdaniya[i Mod N] Do
      Begin
        Write(Title,': ');
        Write(Lst,Title,': ');
        For j:=0 To 11 Do
          If (Monts[j]) Then
          Begin
            Write(MonthName[j]);
            Write(Lst,MonthName[j])
          End
        WriteLn;
        WriteLn(Lst)
      End;

Должно работать...
 К началу страницы 
+ Ответить 
сообщение
Сообщение #16





Группа: Пользователи
Сообщений: 6

Репутация: -  0  +


BlackShadow тебе можно памятник ставить - спасибо!!!
Только вот еще одно НО!К первой проге заставили составить блок-схему. Как ее делать? Как записи там обозначать?А с файлами какие блоки? Помогите плиз!!!
Код
Const
N = 20;
Type
TMonths=Array[0..1] Of Boolean;
TIzdanie=Record
 Title:String[20];
 Tip:Char;
 Months:TMonths
End;
TAddr=Record
 Street:String[20];
 Home:String[3];
 Flat:String[3]
End;
TChel=Record
 Name:String[20];
 Uchastok:String[2];
 Addr:TAddr;
 Count:String[2];
 Izdaniya:Array[0..N-1] Of TIzdanie
End;

Const
Names:Array[0..2] Of String = ('Ivanov','Petrov','Sidorov'); {Дополнишь сам}
Streets:Array[0..2] Of String = ('Pervaya','Vtoraya','Tretyaya'); {См. выше}
Titles:Array[0..2] Of String = ('Programmer','Lamer','Sysop'); {Ну ты догадался}
Tips:Array[0..2] Of Char = ('G','J','D'); {Буквы на угад. Типы изданий.}
MName:Array[0..11] Of String = ('Jan','Feb','Mar','Apr','May','Jun','Jul','Aug','Sep','Oct','Nov','Dec');
Var
Chels:Array[0..100] Of TChel;
TotalChels:Integer;
TotalRecords:Integer;

{Придумывает человечка и сохраняет его в массиве}
Procedure GenerateChel;
Var
x,i,j:Integer;
Begin
With Chels[TotalRecords] Do
Begin
 Name:=Names[Random(3)];              {Придумаем имя}
 Str(Random(100),Uchastok);              {Придумаем участок}
 Addr.Street:=Streets[Random(3)];      {Придумаем улицу}
 Str(Random(1000),Addr.Home);          {Дом}
 Str(Random(1000),Addr.Flat);              {Квартиру}
 x:=Random(50)+1;                            {Вот столько изданий он и выписал}
 Str(x,Count);
End;
{Придумаем ему издания}
For i:=0 To x-1 Do
 With Chels[TotalRecords+(i Div N)].Izdaniya[i Mod N] Do
 Begin
   Title:=Titles[Random(3)];    {Название}
   Tip:=Tips[Random(3)];        {Тип}
   For j:=0 To 11 Do
     Months[j]:=Random(2)=0;  {Месяцы подписки}
 End;
Inc(TotalRecords,(x Div N) + Byte((x Mod N) <> 0))
End;

Var
f:Text;
i,j,k,x,e:Integer;

Begin
Randomize;
TotalChels:=Random(30); {Не более 30 человек, где 0 значит, что 1 чел
                                       всё-таки есть}
TotalRecords:=0;                    {В массиве Chels пока ничего нет}
For i:=0 To TotalChels Do  {придумаем всех челов}
 GenerateChel;

Assign(f,'Chels.Txt');   {Создадим файл}
ReWrite(f);

i:=0;
While i < TotalRecords Do   {И скинемтуда все записи}
Begin
 With Chels[i] Do
 Begin
   WriteLn(f,Name);
   WriteLn(f,'  From Uchastok ',Uchastok);
   WriteLn(f,'  That Lives At ',Addr.Street,' in house #',Addr.Home,' in flat ',Addr.Flat);
   WriteLn(f,'  Subscribed For ',Count,' izdaniya:');
   Val(Count,x,e)
 End;
 For j:=0 To x-1 Do
   With Chels[i + (j Div N)].Izdaniya[j Mod N] Do
   Begin
     Write(f,'    ',Title,' (',Tip,') :');
     For k:=0 To 11 Do
       If Months[k] Then
         Write(f,MName[k],' ');
     WriteLn(f)
   End;
 Inc(i,(x Div N) + Byte((x Mod N) <> 0))
End;

Close(f)
End.
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #17


Бывалый
***

Группа: Пользователи
Сообщений: 195
Пол: Женский

Репутация: -  0  +


а в чем проблемы с блок схемами то?!

___
и любят преподы издеваться.. smile.gif


--------------------
непонимающая..
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #18


Бывалый
***

Группа: Пользователи
Сообщений: 239
Пол: Женский
Реальное имя: Юлия

Репутация: -  3  +


Код
Как записи там обозначать?А с файлами какие блоки?

записи по-моему обозначаются обычными прямоугольными блоками (если идет действие с этой записью), а файлы обозначаются ввиде бочек или больших венчестеров или фиг его знает что оно такое!! blink.gif lol.gif


--------------------
For every evil under the sun
There is a remedy or there is none
If there is one - try to find it
If there is none - never mind it!
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #19





Группа: Пользователи
Сообщений: 6

Репутация: -  0  +


Вы очень помогли! sad.gif
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #20


Новичок
*

Группа: Пользователи
Сообщений: 14

Репутация: -  0  +


окран, ты еще недоволен ??
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 

2 страниц V  1 2 >
 Ответить  Открыть новую тему 
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 





- Текстовая версия 22.09.2020 15:39
500Gb HDD, 6Gb RAM, 2 Cores, 7 EUR в месяц — такие хостинги правда бывают
Связь с администрацией: bu_gen в домене octagram.name